// { dg-do run } template <class Called> class aCallback { public: aCallback(Called& obj, int (Called::*met)()); int callback(); protected: private: Called& object; int (Called::*method)(); }; template <class Called> aCallback<Called>::aCallback(Called& obj, int (Called::*met)()) : object(obj), method(met) {} template <class Called> int aCallback<Called>::callback() { return (object.*method)(); } struct myStruct { int action() {return 0;} }; int main() { myStruct toto; aCallback<myStruct> cb(toto, &myStruct::action); return cb.callback(); }