#include <iostream>
#include <functional>
class Bang
{
public:
Bang(int i = 0) : m_val(i)
{
m_foo = [bang = *this] { std::cout << bang.m_val << std::endl; };
}
~Bang()
{
m_val = -1;
}
void Foo()
{
m_foo();
}
private:
int m_val;
std::function<void()> m_foo;
};
Bang GetBang()
{
return Bang(100500);
}
int main()
{
Bang b;
b = GetBang();
b.Foo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIEJhbmcKewpwdWJsaWM6CglCYW5nKGludCBpID0gMCkgOiBtX3ZhbChpKQoJewoJCW1fZm9vID0gW2JhbmcgPSAqdGhpc10geyBzdGQ6OmNvdXQgPDwgYmFuZy5tX3ZhbCA8PCBzdGQ6OmVuZGw7IH07Cgl9CgoJfkJhbmcoKQoJewoJCW1fdmFsID0gLTE7Cgl9CgoJdm9pZCBGb28oKQoJewoJCW1fZm9vKCk7Cgl9CnByaXZhdGU6CglpbnQgbV92YWw7CglzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV9mb287Cn07CgpCYW5nIEdldEJhbmcoKQp7CglyZXR1cm4gQmFuZygxMDA1MDApOwp9CgppbnQgbWFpbigpCnsKCUJhbmcgYjsKCWIgPSBHZXRCYW5nKCk7CgliLkZvbygpOwoJcmV0dXJuIDA7Cn0K