1class A;
2typedef int (A::*f_ptr) (void);
3
4class B {
5public:
6  B() {}; ~B() {};
7  B& dummy(f_ptr cb) { return *this; };
8};
9
10template<class SP, class CB> SP& call_dummy(SP* sp, CB cb) {
11  sp->dummy(cb);
12  return *sp;
13};
14
15class A {
16public:
17  A() {}; ~A() {};
18  int ok() { return 0; };
19  A& call_it(B* s) {
20    call_dummy(s, &A::ok);
21    return *this;
22  };
23};
24
25int main() {
26  A a; B b;
27  a.call_it(&b);
28  return 0;
29}
30