// { dg-do assemble  }
// GROUPS passed casts
class VObject;

typedef int boolean;

typedef boolean (VObject::*method)();
typedef boolean (VObject::*method0)();
typedef boolean (VObject::*method1)(long);

#define methodOf(o,m)  (method)(&o::m)


class VObject {
    public:
    boolean perform(method );
    boolean perform(method , long);
    void    affectMethod(method );
    void    dummy(){};
};


boolean VObject::perform(method m)
{
        method0 q = (method0)m;
        return(this->*q)();
}


boolean VObject::perform(method m, long param)
{
        method1 q = (method1)m;
        return(this->*q)(param);
 }

void VObject::affectMethod(method m)
{
        m =   methodOf(VObject, dummy);
}
