To najprostszy przykład, jaki mogłem wymyślić, który odwzorowuje problem.Niezdefiniowane odniesienie do statycznej zmiennej lokalnej
template<class T>
struct X
{
static void foo()
{
static int z = 0;
[]{ z = 1; }();
}
};
int main()
{
X<int>::foo();
return 0;
}
Próbowałem go z MinGW 4.6 i 4.7, a także g ++ 4.6 w Ubuntu i wszystkie z nich daje mi błąd Link "niezdefiniowana odniesienia do` z '". Więc teraz zastanawiam się, czy to nawet legalne. VC10 nie ma z tym problemu.
Działa, jeśli X jest normalną klasą zamiast szablonu. Ponadto, nie sądzę, że jest to związane z lambdami, ponieważ dostaję błąd, nawet jeśli zamieniam lambdę na lokalną klasę.
Dodaj tag C++ 11, może to da ci lepszą odpowiedź – marcinj