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)23boolean VObject::perform(method m) 24 { 25 method0 q = (method0)m; 26 return(this->*q)(); 27 } 28 29 perform(method m,long param)30boolean VObject::perform(method m, long param) 31 { 32 method1 q = (method1)m; 33 return(this->*q)(param); 34 } 35 affectMethod(method m)36void VObject::affectMethod(method m) 37 { 38 m = methodOf(VObject, dummy); 39 } 40