#include <cstdio>
#include <functional>
class B {
public:
typedef std::function<void (B*)> Function;
void f3() {
puts("okay");
}
void f1() {
_func(this);
}
Function _func;
};
class D : public B
{
public:
D()
{
_func = (void (B::*)()) &D::f2; // Here is the awfull cast I hate to do
}
void f2() {
f3();
}
};
int main() {
D d;
d.f1();
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CgoKY2xhc3MgQiB7IApwdWJsaWM6CiAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCAoQiopPiBGdW5jdGlvbjsgICAgCgogICAgdm9pZCBmMygpIHsKICAgICAgICBwdXRzKCJva2F5Iik7CiAgICB9CiAgICB2b2lkIGYxKCkgeyAgIAogICAgICAgIF9mdW5jKHRoaXMpOwogICAgfQoKICAgIEZ1bmN0aW9uIF9mdW5jOwp9OwoKY2xhc3MgRCA6IHB1YmxpYyBCIAp7CnB1YmxpYzoKICAgIEQoKQogICAgewogICAgICAgIF9mdW5jID0gKHZvaWQgKEI6OiopKCkpICZEOjpmMjsgLy8gSGVyZSBpcyB0aGUgYXdmdWxsIGNhc3QgSSBoYXRlIHRvIGRvCiAgICB9CgogICAgdm9pZCBmMigpIHsKICAgICAgICBmMygpOwogICAgfQoKfTsKCmludCBtYWluKCkgewogICAgRCBkOwogICAgZC5mMSgpOwp9