// { dg-do assemble } // GROUPS passed templates template class aCallback { public: aCallback(Called& obj, int (Called::*met)()); int callback(); protected: private: // the object to call Called& object; // the method to apply int (Called::*method)(); }; template aCallback::aCallback(Called& obj, int (Called::*met)()) : object(obj), method(met) {} template int aCallback::callback() { return (object.*method)(); } struct myStruct { int action() {return 24;} }; int main() { myStruct toto; aCallback cb(toto, &myStruct::action); return cb.callback(); }