1 // { dg-do assemble  }
2 // GROUPS passed casts
3 class VObject;
4 
5 typedef int boolean;
6 
7 typedef boolean (VObject::*method)();
8 typedef boolean (VObject::*method0)();
9 typedef boolean (VObject::*method1)(long);
10 
11 #define methodOf(o,m)  (method)(&o::m)
12 
13 
14 class VObject {
15     public:
16     boolean perform(method );
17     boolean perform(method , long);
18     void    affectMethod(method );
dummy()19     void    dummy(){}
20 };
21 
22 
perform(method m)23 boolean VObject::perform(method m)
24 {
25         method0 q = (method0)m;
26         return(this->*q)();
27 }
28 
29 
perform(method m,long param)30 boolean VObject::perform(method m, long param)
31 {
32         method1 q = (method1)m;
33         return(this->*q)(param);
34  }
35 
affectMethod(method m)36 void VObject::affectMethod(method m)
37 {
38         m =   methodOf(VObject, dummy);
39 }
40