Использование typedefs из класса шаблона в функции шаблона (не члена) - PullRequest
1 голос
/ 10 марта 2010

Не удается скомпилировать следующее (в любом случае, с 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 :: FooType должен быть полностью допустимым внутри templated ().

1 Ответ

2 голосов
/ 10 марта 2010

использование typename:

  typename Foo< T >::FooType bar = 0;

См. это , почему требуется typename.

...