Добрый день.
Столкнулся с тем, что при использовании вложенной лямбды происходит неявно захват 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;
}
Спасибо. Баг запостил.
Здравствуйте, Zhendos, Вы писали:
Z>Здравствуйте, alexvn, Вы писали:
A>>Добрый день.
A>>Столкнулся с тем, что при использовании вложенной лямбды происходит неявно захват this. Ниже написан минимальный пример, воспроизводящий проблему.
A>>Пример успешно компилируется в VS2012, Version 11.0.60610.01 Update 3
A>>Microsoft (R) C/C++ Optimizing Compiler Version 17.00.60610.1 for x86
A>>Подскажите, здесь проблема в студийном компиляторе или так и должно быть по стандарту.
A>>Спасибо!
Z>Судя по тому, что gcc, clang и Intel'ский компилятор ругаются на незахваченный this,
Z>это баг в компиляторе, причем даже 2013 RC не ругается на такой код.
Z>Запостили баг в M$?