Это самый простой пример, который я мог придумать, который воспроизводит проблему.
template<class T>
struct X
{
static void foo()
{
static int z = 0;
[]{ z = 1; }();
}
};
int main()
{
X<int>::foo();
return 0;
}
Я пробовал это с MinGW 4.6 и 4.7, а также с g ++ 4.6 в Ubuntu, и все они выдают мне ошибку ссылки «неопределенная ссылка на` z '». Так что теперь это заставляет меня задуматься, законно ли это вообще. У VC10 с этим проблем нет.
Это работает, если X - это обычный класс, а не шаблон. Кроме того, я не думаю, что это связано с лямбдами, потому что я получаю сообщение об ошибке, даже если заменяю лямбда локальным классом.