#include <iostream>
struct Foo
{
};
struct Bar : public Foo
{
int F0()
{
return 0;
}
};
struct Baz : public Foo
{
int F1()
{
return 1;
}
};
int main(int argc, char **argv)
{
int (Bar::*pF0)() = &Bar::F0;
int (Baz::*pF1)() = &Baz::F1;
int (Foo::*pointer1)() = static_cast<int (Foo::*)()>(pF0);
int (Foo::*pointer2)() = static_cast<int (Foo::*)()>(pF1);
Bar r;
Baz z;
std::cout << (r.*pointer1)() << '\n';
std::cout << (z.*pointer2)() << '\n';
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEZvbwp7CiAgICAKfTsKCnN0cnVjdCBCYXIgOiBwdWJsaWMgRm9vCnsKICAgIGludCBGMCgpCiAgICB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9Cn07CgpzdHJ1Y3QgQmF6IDogcHVibGljIEZvbwp7CiAgICBpbnQgRjEoKQogICAgewogICAgICAgIHJldHVybiAxOwogICAgfSAgICAKfTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewogICAgaW50IChCYXI6OipwRjApKCkgPSAmQmFyOjpGMDsKICAgIGludCAoQmF6OjoqcEYxKSgpID0gJkJhejo6RjE7CiAgICBpbnQgKEZvbzo6KnBvaW50ZXIxKSgpID0gc3RhdGljX2Nhc3Q8aW50IChGb286OiopKCk+KHBGMCk7CiAgICBpbnQgKEZvbzo6KnBvaW50ZXIyKSgpID0gc3RhdGljX2Nhc3Q8aW50IChGb286OiopKCk+KHBGMSk7CgogICAgQmFyIHI7CiAgICBCYXogejsKCiAgICBzdGQ6OmNvdXQgPDwgKHIuKnBvaW50ZXIxKSgpIDw8ICdcbic7CiAgICBzdGQ6OmNvdXQgPDwgKHouKnBvaW50ZXIyKSgpIDw8ICdcbic7CgogICAgcmV0dXJuIDA7Cn0=