次のコードが与えられます:
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() {}
};
}
「エラー:テンプレート宣言をブロックスコープに表示できません」というメッセージが表示されます。