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)())23 aCallback<Called>::aCallback(Called& obj,
24                              int (Called::*met)()) :
25 object(obj),
26 method(met)
27 {}
28 
29 template <class Called>
callback()30 int aCallback<Called>::callback()
31 {
32   return (object.*method)();
33 }
34 
35 struct myStruct
36 {
actionmyStruct37   int action() {return 24;}
38 };
39 
main()40 int main()
41 {
42   myStruct toto;
43 
44   aCallback<myStruct>   cb(toto, &myStruct::action);
45 
46   return cb.callback();
47 }
48