// { dg-do run } class B { public: int bi; void bProc ( void ) { bi = 39; } }; class D : public B { public: int di; void dProc (void ){ di = 42; } }; typedef void (B::*BPROC)(void); typedef void (D::*DPROC)(void); union AFX_PMSG { public: AFX_PMSG () {} AFX_PMSG ( BPROC bpr ) { bfn = bpr ; } operator BPROC() { return bfn; } BPROC bfn; DPROC dfn; }; int main(int argc, char *argv[]) { B b; D d; BPROC bpr = &B::bProc; AFX_PMSG pmsg(bpr); BPROC ppr = pmsg; return 0; }