以下はコンパイルに失敗します(とにかく、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()内で完全に有効である必要があります。