Использование typedefs из класса шаблона в функции шаблона (не члена)
Следующее не скомпилируется (в любом случае с gcc 4.2.1 в Linux):
template< typename T >
class Foo
{
public:
typedef int FooType;
};
void
ordinary()
{
Foo< int >::FooType bar = 0;
}
template< typename T >
void
templated()
{
Foo< T >::FooType bar = T( 0 );
}
int main( int argc, char **argv )
{
return 0;
}
Проблема в этой строке:
Foo< T >::FooType bar = 0;
... и компилятор делает эту жалобу:
foo.c: В функции 'void templated()':
foo.c: 22: ошибка: ожидается `;' перед "бар"
Обычно это можно увидеть, когда тип еще не объявлен, но, насколько я могу судить, Foo
1 ответ
Решение
Использование typename
:
typename Foo< T >::FooType bar = 0;
Посмотрите, почему Typename необходимо.