#include <iostream>
#include <functional>
struct X {
X(int arg = 1) :
someVar(arg)
{
std::cout << "X(" << arg << ")" << std::endl;
}
~X()
{
std::cout << "~X(" << someVar << ")" << std::endl;
}
int someVar;
};
std::function<void()> get_lambda(int number)
{
X x(number);
return [&x]() {
std::cout << "lambda from get_lambda: x.someVar == " << x.someVar << std::endl;
};
}
int main()
{
auto lambda = get_lambda(42);
lambda();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnN0cnVjdCBYIHsKICAgIFgoaW50IGFyZyA9IDEpIDoKICAgICAgICBzb21lVmFyKGFyZykKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIlgoIiA8PCBhcmcgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICB+WCgpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJ+WCgiIDw8IHNvbWVWYXIgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICBpbnQgc29tZVZhcjsKfTsKCnN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBnZXRfbGFtYmRhKGludCBudW1iZXIpCnsKICAgIFggeChudW1iZXIpOwogICAgcmV0dXJuIFsmeF0oKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJsYW1iZGEgZnJvbSBnZXRfbGFtYmRhOiB4LnNvbWVWYXIgPT0gIiA8PCB4LnNvbWVWYXIgPDwgc3RkOjplbmRsOwogICAgfTsKfQoKaW50IG1haW4oKQp7CiAgICBhdXRvIGxhbWJkYSA9IGdldF9sYW1iZGEoNDIpOwogICAgbGFtYmRhKCk7CgogICAgcmV0dXJuIDA7Cn0K