#include <iostream>
#include <memory>
#include <string>
class Foo {
public:
Foo(const std::string& i_name) : name(i_name)
{}
std::function<void()> GetPrinter() {
return [this]() {
std::cout << name << std::endl;
};
}
std::string name;
};
int main() {
std::function<void()> f;
{
auto foo = std::make_shared<Foo>("ok");
f = foo->GetPrinter();
}
auto foo = std::make_shared<Foo>("WRONG");
f();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8c3RyaW5nPgoKY2xhc3MgRm9vIHsKcHVibGljOgoJRm9vKGNvbnN0IHN0ZDo6c3RyaW5nJiBpX25hbWUpIDogbmFtZShpX25hbWUpCgl7fQoJCglzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gR2V0UHJpbnRlcigpIHsKCQlyZXR1cm4gW3RoaXNdKCkgewoJCQlzdGQ6OmNvdXQgPDwgbmFtZSA8PCBzdGQ6OmVuZGw7CgkJfTsKCX0KCglzdGQ6OnN0cmluZyBuYW1lOwp9OwoKaW50IG1haW4oKSB7CglzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZjsKCQoJewoJCWF1dG8gZm9vID0gc3RkOjptYWtlX3NoYXJlZDxGb28+KCJvayIpOwoJCWYgPSBmb28tPkdldFByaW50ZXIoKTsKCX0KCQoJYXV0byBmb28gPSBzdGQ6Om1ha2Vfc2hhcmVkPEZvbz4oIldST05HIik7CgkKCWYoKTsKCQoJcmV0dXJuIDA7Cn0K