以下无法编译(无论如何,在 Linux 上使用 gcc 4.2.1):
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:错误:预期的 `;' 在“酒吧”之前</p>
通常在没有声明类型时会看到这一点,但据我所知,Foo< T >::FooType 在 templated() 中应该是完全有效的。