Неопределенная ссылка на статическую локальную переменную

Это самый простой пример, который я мог придумать, который воспроизводит проблему.

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 - это обычный класс, а не шаблон. Кроме того, я не думаю, что это связано с лямбдами, потому что я получаю сообщение об ошибке, даже если заменяю лямбда локальным классом.

9
задан Mr.Anubis 29 December 2011 в 10:55
поделиться