#include <functional>
#include <memory>
#include <iostream>
struct MyClass
{
int x;
MyClass(int x_) : x(x_) { }
void some_func()
{
std::cout << x << std::endl;
}
};
int main(int argc, char *argv[])
{
std::shared_ptr<MyClass> pmc;
auto mfp = std::bind(&MyClass::some_func, std::ref(pmc));
pmc = std::make_shared<MyClass>(42);
mfp();
pmc = std::make_shared<MyClass>(1729);
mfp();
}
ICAgICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogICAgI2luY2x1ZGUgPG1lbW9yeT4KICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KCiAgICBzdHJ1Y3QgTXlDbGFzcwogICAgewogICAgICAgIGludCB4OwogICAgICAgIE15Q2xhc3MoaW50IHhfKSA6IHgoeF8pIHsgfQogICAgICAgIHZvaWQgc29tZV9mdW5jKCkKICAgICAgICB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCB4IDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CiAgICB9OwoKICAgIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgICB7CiAgICAgICAgc3RkOjpzaGFyZWRfcHRyPE15Q2xhc3M+IHBtYzsKICAgICAgICBhdXRvIG1mcCA9IHN0ZDo6YmluZCgmTXlDbGFzczo6c29tZV9mdW5jLCBzdGQ6OnJlZihwbWMpKTsKCiAgICAgICAgcG1jID0gc3RkOjptYWtlX3NoYXJlZDxNeUNsYXNzPig0Mik7CiAgICAgICAgbWZwKCk7CgogICAgICAgIHBtYyA9IHN0ZDo6bWFrZV9zaGFyZWQ8TXlDbGFzcz4oMTcyOSk7CiAgICAgICAgbWZwKCk7CiAgICB9Cg==