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)11 template<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()26 int main() {
27   A a; B b;
28   a.call_it(&b);
29   return 0;
30 }
31