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