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