次のコードが与えられます:
void f()
{
class A
{
template <typename T>
void g() {}
};
}
g ++ 4.4(およびg++-4.6 -std=gnu++0x
)文句を言う:「ローカルクラスのメンバーテンプレートの無効な宣言」。
どうやらローカルクラスはテンプレートメンバーを持つことを許可されていません。この制限の目的は何ですか? C++ 0xで削除されますか?
注:ローカルクラス自体をテンプレートメンバーにするのではなく、テンプレートにする場合:
void f()
{
template <typename T>
class A
{
void g() {}
};
}
「エラー:テンプレート宣言をブロックスコープに表示できません」というメッセージが表示されます。
この制限の目的は?ただの推測ですが:
おもしろ情報:関数内でローカルクラスを、関数で宣言された(c ++ 0x)-lambda関数の戻り値の型として使用してみてください:MSVC 2010:内部コンパイラエラー^^。