// Special g++ Options: -Wno-pmf-conversions // prms-id: 10769 #define PMF2PF(PMF) ((void (*)())(PMF)) int ok = 0; class A { public: void f1a() { ok += 3; } void f1b() { ok += 5; } void f2a() { ok += 7; } // gets bogus error XFAIL *-*-* void f2b() { } const static void (*table[2][2])(); void main(); } a; const void (*A::table[2][2])() = { { PMF2PF(&A::f1a), PMF2PF(&A::f1b) }, { PMF2PF(&A::f2a), PMF2PF(&A::f1b) }, }; void dispatch (A *obj, int i, int j) { (*(void (*)(A *))A::table[i][j])(obj); } void A::main() { dispatch (&a, 0, 0); void (A::*mPtr)() = &A::f1a; (*(void (*)(A*))PMF2PF(mPtr))(&a); (*(void (*)(A*))PMF2PF(f2a))(&a); // gets bogus error XFAIL *-*-* } int main() { a.A::main(); dispatch (&a, 0, 1); void (A::*mPtr)() = &A::f1b; (*(void (*)(A*))PMF2PF(a.*mPtr))(&a); (*(void (*)(A*))PMF2PF(a.f2a))(&a); // gets bogus error XFAIL *-*-* return ok != 3+3+5+5+7+7; }