#include <iostream>
#include <memory>
class Hoge {
private:
int a;
void f() { std::cout << "hoge:" << a << std::endl; }
public:
void (Hoge::*g1())() { return &Hoge::f; }
int (Hoge::*g2()) { return &Hoge::a; }
Hoge(int a) : a(a){}
};
int main() {
std::shared_ptr<Hoge> hoge = std::make_shared<Hoge>(12345);
(hoge.get()->*(hoge->g1()))();
hoge.get()->*(hoge->g2()) = 54321;
(hoge.get()->*(hoge->g1()))();
return 0;
}
/* end */
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKY2xhc3MgSG9nZSB7CnByaXZhdGU6CiAgaW50IGE7CiAgdm9pZCBmKCkgeyBzdGQ6OmNvdXQgPDwgImhvZ2U6IiA8PCBhIDw8IHN0ZDo6ZW5kbDsgfQpwdWJsaWM6CiAgdm9pZCAoSG9nZTo6KmcxKCkpKCkgeyByZXR1cm4gJkhvZ2U6OmY7IH0KICBpbnQgKEhvZ2U6OipnMigpKSB7IHJldHVybiAmSG9nZTo6YTsgfQogIEhvZ2UoaW50IGEpIDogYShhKXt9Cn07CiAKaW50IG1haW4oKSB7CiAgc3RkOjpzaGFyZWRfcHRyPEhvZ2U+IGhvZ2UgPSBzdGQ6Om1ha2Vfc2hhcmVkPEhvZ2U+KDEyMzQ1KTsKICAoaG9nZS5nZXQoKS0+Kihob2dlLT5nMSgpKSkoKTsKICBob2dlLmdldCgpLT4qKGhvZ2UtPmcyKCkpID0gNTQzMjE7CiAgKGhvZ2UuZ2V0KCktPiooaG9nZS0+ZzEoKSkpKCk7CiAgcmV0dXJuIDA7Cn0KLyogZW5kICovCiA=