class A; typedef int (A::*f_ptr) (void); class B { public: B() {}; ~B() {}; B& dummy(f_ptr cb) { return *this; }; }; template SP& call_dummy(SP* sp, CB cb) { sp->dummy(cb); return *sp; }; class A { public: A() {}; ~A() {}; int ok() { return 0; }; A& call_it(B* s) { call_dummy(s, &A::ok); return *this; }; }; int main() { A a; B b; a.call_it(&b); return 0; }