これは、問題を再現することができる最も簡単な例です。静的ローカル変数への未定義の参照
template<class T>
struct X
{
static void foo()
{
static int z = 0;
[]{ z = 1; }();
}
};
int main()
{
X<int>::foo();
return 0;
}
私がg ++ 4.6は、Ubuntuの中でも、MinGWの4.6と4.7でそれを試してみたし、それらのすべては、私のリンクエラー「`Z 'への未定義の参照」を与えます。だから、これは私がこれが法的であるかどうか疑問に思います。 VC10は問題ありません。
Xがテンプレートの代わりに通常のクラスであれば動作します。また、ラムダをローカルクラスに置き換えてもエラーが発生するので、ラムダとは関係ないと思います。以下を受け入れたが、VC++はない++
C++ 11タグを追加すると、より良い応答が得られるかもしれません。 – marcinj