VS2012. Захват переменных во вложенной лямбде
От: alexvn  
Дата: 20.09.13 09:54
Оценка:
Добрый день.

Столкнулся с тем, что при использовании вложенной лямбды происходит неявно захват this. Ниже написан минимальный пример, воспроизводящий проблему.

Пример успешно компилируется в VS2012, Version 11.0.60610.01 Update 3
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.60610.1 for x86


Подскажите, здесь проблема в студийном компиляторе или так и должно быть по стандарту.
Спасибо!


#include <iostream>

template<typename Fn>
void Execute(Fn fn)
{
    fn();
}

class A
{
public:
    A() : x_(1) { }
public:
    void F()
    {
        auto local_x = 0u;
        Execute([local_x]()
        {
            Execute([=]()
            {
                std::cout << x_ << std::endl;
            });
        });
    }

private: 
    int x_;
};

int main(int argc, char* argv[])
{
    A a;
    a.F();
    return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.