#include <iostream>
#include <functional>
using namespace std;
namespace
{
struct call
{
void operator()() const
{
std::cout << "call::operator()" << std::endl;
}
};
struct dummy
{
dummy()
{
std::cout << "dummy()" << std::endl;
}
dummy(const dummy&) = delete;
call member;
};
}
int main() {
dummy d;
d.member();
auto b = std::bind(&dummy::member, &d);
std::cout << (void*)&b() << std::endl;
std::cout << (void*)&d.member <<std::endl;
b()();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpuYW1lc3BhY2UKewoJc3RydWN0IGNhbGwKCXsKCQl2b2lkIG9wZXJhdG9yKCkoKSBjb25zdAoJCXsKCQkJCXN0ZDo6Y291dCA8PCAiY2FsbDo6b3BlcmF0b3IoKSIgPDwgc3RkOjplbmRsOwoJCX0KCX07CgkKICAgIHN0cnVjdCBkdW1teQogICAgewogICAgICAgIGR1bW15KCkKICAgICAgICB7CiAgICAgICAgCXN0ZDo6Y291dCA8PCAiZHVtbXkoKSIgPDwgc3RkOjplbmRsOwogICAgICAgIH0KICAgICAgICBkdW1teShjb25zdCBkdW1teSYpID0gZGVsZXRlOwoKICAgICAgICBjYWxsIG1lbWJlcjsKICAgIH07Cn0KCgppbnQgbWFpbigpIHsKCWR1bW15IGQ7CgkKCWQubWVtYmVyKCk7CgogICAgYXV0byBiID0gc3RkOjpiaW5kKCZkdW1teTo6bWVtYmVyLCAmZCk7CiAgICAKICAgIAogICAgc3RkOjpjb3V0IDw8ICh2b2lkKikmYigpIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCAodm9pZCopJmQubWVtYmVyIDw8c3RkOjplbmRsOwogICAgCiAgICBiKCkoKTsKCXJldHVybiAwOwp9