При вызове функции-члена без шаблонов в базовом классе можно импортировать ее имя с using
в производный класс и затем использовать его. Возможно ли это для функций-членов шаблона в базовом классе?
Просто с using
не работает (с g ++ - snapshot-20110219 -std = c ++ 0x):
template <typename T>
struct A {
template <typename T2> void f() { }
};
template <typename T>
struct B : A<T> {
using A<T>::f;
template <typename T2> void g() {
// g++ throws an error for the following line: expected primary expression before `>`
f<T2>();
}
};
int main() {
B<float> b;
b.g<int>();
}
Я знаю, что префикс базового класса явно, как в
A<T>::template f<T2>();
работает нормально, но вопрос в следующем: возможно ли это без и с помощью простого объявления использования (как это происходит в случае, когда f
не является функцией шаблона)?
Если это невозможно, кто-нибудь знает почему?