Использование typedefs из шаблонного класса в шаблонной функции (не являющейся членом)

StackOverflow https://stackoverflow.com/questions/2418641

Вопрос

Следующее не удается скомпилировать (во всяком случае, с 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()’:

фу.с:22:ошибка:ожидаемый `;' перед ‘bar’

Обычно это видно, когда тип не был объявлен, но, насколько я могу судить, Foo< T >::FooType должен быть абсолютно корректным внутри templated() .

Это было полезно?

Решение

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

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

Видишь это для чего нужен typename.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top