При вызове не шаблонной функции-члена в базовом классе можно импортировать ее имя с помощью , используя
, в производный класс, а затем использовать его . Возможно ли это также для функций-членов шаблона в базовом классе?
Просто с с использованием
это не работает (с 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>();
, работает нормально, но вопрос в следующем: возможно ли это без и с простым объявлением using (точно так же, как в случае, когда f
не функция шаблона)?
Если это невозможно, кто-нибудь знает, почему?