#include <functional>
#include <iostream>
#include <memory>
struct foo
{
int get_val() const
{
return 42;
}
};
int main()
{
foo obj;
std::shared_ptr<foo> ptr = std::make_shared<foo>();
const auto getter = std::mem_fn( &foo::get_val );
std::cout << getter( obj ) << std::endl;
std::cout << getter( ptr ) << std::endl;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1lbW9yeT4KCnN0cnVjdCBmb28KewoJaW50IGdldF92YWwoKSBjb25zdAoJewoJCXJldHVybiA0MjsKCX0KfTsKCmludCBtYWluKCkKewoJZm9vIG9iajsKCXN0ZDo6c2hhcmVkX3B0cjxmb28+IHB0ciA9IHN0ZDo6bWFrZV9zaGFyZWQ8Zm9vPigpOwoKCWNvbnN0IGF1dG8gZ2V0dGVyID0gc3RkOjptZW1fZm4oICZmb286OmdldF92YWwgKTsKCglzdGQ6OmNvdXQgPDwgZ2V0dGVyKCBvYmogKSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgZ2V0dGVyKCBwdHIgKSA8PCBzdGQ6OmVuZGw7Cn0=