1// { dg-do run  }
2class B {
3public:
4    int bi;
5    void bProc ( void ) { bi = 39; }
6  };
7
8class D : public B {
9public:
10    int di;
11    void dProc (void ){ di = 42; }
12  };
13
14typedef void (B::*BPROC)(void);
15typedef void (D::*DPROC)(void);
16
17union AFX_PMSG {
18public:
19
20  AFX_PMSG () {};
21  AFX_PMSG ( BPROC bpr ) { bfn = bpr ; }
22
23  operator BPROC() { return bfn; }
24
25  BPROC bfn;
26  DPROC dfn;
27};
28
29
30int main(int argc, char *argv[]) {
31  B b;
32  D d;
33
34  BPROC    bpr = &B::bProc;
35  AFX_PMSG pmsg(bpr);
36
37  BPROC ppr = pmsg;
38
39  return 0;
40}
41