У меня есть следующий код, и он не может скомпилировать
template < typename T >
class Base
{
public:
typedef T * TPtr;
void func()
{
}
};
template < typename T >
class Derived : public Base< T >
{
public:
using Base< T >::TPtr;
using Base< T >::func;
TPtr ptr;
};
int main( int c, char *v[] )
{
Derived< int > d;
d.func();
}
Компилятор выдает следующее.
t.cpp:16: error: 'TPtr' does not name a type
t.cpp:16: note: (perhaps 'typename Base<T>::TPtr' was intended)
Теперь я знаю, что могу просто сделать, как предлагает компилятор, ноЯ не могу понять, почему
using Base< T >::TPtr;
не работает.
Если я закомментирую строку "TPtr ptr
", то она компилируется, доказывая, что "using Base< T >::func;
"Заявление работает.
Есть идеи?