Questo è l'esempio più semplice che è possibile ottenere per riprodurre il problema.Riferimento indefinito a una variabile locale statica
template<class T>
struct X
{
static void foo()
{
static int z = 0;
[]{ z = 1; }();
}
};
int main()
{
X<int>::foo();
return 0;
}
ho provato con MinGW 4.6 e 4.7, anche g ++ 4.6 in Ubuntu e tutti loro mi danno l'errore di collegamento "undefined reference to` z '". Quindi ora mi chiedo se questo sia persino legale. VC10 non ha alcun problema con esso.
Funziona se X è una classe normale anziché un modello. Inoltre, non penso che sia collegato a lambda perché ottengo l'errore anche se sostituisco il lambda con una classe locale.
aggiungi tag C++ 11, forse ti darà una risposta migliore – marcinj