class Base
{
public:
typedef void (Base::*Handler)();
Base();
virtual ~Base();
Handler f();
virtual void g();
};
class Derived : public Base
{
public:
Derived();
virtual ~Derived();
virtual void g();
};
// [complete demo code]
Base::Handler Base::f() { return &Base::g; }
Base B; Derived D; Base::Handler h = B.f();
int main()
{
(B.*h)(); // which version of g is called?
(D.*h)(); // which version of g is called?
}