1 // { dg-do assemble } 2 // GROUPS passed templates 3 template <class Called> 4 class aCallback 5 { 6 public: 7 aCallback(Called& obj, int (Called::*met)()); 8 9 int callback(); 10 11 protected: 12 13 private: 14 // the object to call 15 Called& object; 16 17 // the method to apply 18 int (Called::*method)(); 19 20 }; 21 22 template <class Called> aCallback(Called & obj,int (Called::* met)())23aCallback<Called>::aCallback(Called& obj, 24 int (Called::*met)()) : 25 object(obj), 26 method(met) 27 {} 28 29 template <class Called> callback()30int aCallback<Called>::callback() 31 { 32 return (object.*method)(); 33 } 34 35 struct myStruct 36 { actionmyStruct37 int action() {return 24;} 38 }; 39 main()40int main() 41 { 42 myStruct toto; 43 44 aCallback<myStruct> cb(toto, &myStruct::action); 45 46 return cb.callback(); 47 } 48