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