#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