// { dg-do run } void *vp; class silly { public: virtual int b() { return 1; } }; class solly : silly { public: virtual int b() { return 2; } }; class thing { public: virtual int a() { return 3; } }; class thong : public solly, public thing { public: virtual int a() { if (this != vp) return 4; else return 0; } }; typedef int(thing::*ping)(); ping qq = &thing::a; int main() { thong b; vp = &b; return (b.*qq)(); }