#include <iostream>
#include <functional>
class NAME
{
public:
int value;
void f()
{
std::cout << "f() this=" << static_cast<void*>(this) << " value=" << value << std::endl;
}
NAME() : value(12345)
{
std::cout << "default constructor, this=" << static_cast<void*>(this) << std::endl;
}
NAME(const NAME &src) : value(src.value)
{
std::cout << "copy constructor, src=" << static_cast<const void*>(&src) << " this=" << static_cast<void*>(this) << std::endl;
}
};
int main()
{
std::cout << "Hello World" << std::endl;
NAME n;
std::cout << "&n=" << static_cast<void*>(&n) << std::endl;
std::function<void ()> callable = std::bind(&NAME::f, &n);
callable();
std::function<void ()> callable2 = std::bind(&NAME::f, n);
callable2();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIE5BTUUKewpwdWJsaWM6CglpbnQgdmFsdWU7CgogICAgdm9pZCBmKCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgImYoKSB0aGlzPSIgPDwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpIDw8ICIgdmFsdWU9IiA8PCB2YWx1ZSA8PCBzdGQ6OmVuZGw7CiAgICB9CgogICAgTkFNRSgpIDogdmFsdWUoMTIzNDUpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJkZWZhdWx0IGNvbnN0cnVjdG9yLCB0aGlzPSIgPDwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICBOQU1FKGNvbnN0IE5BTUUgJnNyYykgOiB2YWx1ZShzcmMudmFsdWUpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJjb3B5IGNvbnN0cnVjdG9yLCBzcmM9IiA8PCBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oJnNyYykgPDwgIiB0aGlzPSIgPDwgc3RhdGljX2Nhc3Q8dm9pZCo+KHRoaXMpIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCmludCBtYWluKCkKewogICBzdGQ6OmNvdXQgPDwgIkhlbGxvIFdvcmxkIiA8PCBzdGQ6OmVuZGw7IAogCiAgIE5BTUUgbjsKICAgc3RkOjpjb3V0IDw8ICImbj0iIDw8IHN0YXRpY19jYXN0PHZvaWQqPigmbikgPDwgc3RkOjplbmRsOyAKCiAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY2FsbGFibGUgPSBzdGQ6OmJpbmQoJk5BTUU6OmYsICZuKTsKICAgY2FsbGFibGUoKTsKCiAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY2FsbGFibGUyID0gc3RkOjpiaW5kKCZOQU1FOjpmLCBuKTsKICAgY2FsbGFibGUyKCk7CgogICByZXR1cm4gMDsKfQ==