// { dg-do run } // prms-id: 5840 class Signal { public: int Name(void) { return 1; } }; class Derived : public Signal { public: int Name(void) { return 2; } }; template class Bar { public: int value (Foo* a) { return (a->*Id)(); } }; /* The following line is illegal under the new rules for non-type template arguments in the standard, so it is commented out. */ /* template class Bar ; */ template class Bar ; template class Bar ; Derived a; /* Bar dispatcher1; */ Bar dispatcher2; int main() { /* int i1 = dispatcher1.value(&a); */ int i2 = dispatcher2.value(&a); return /* i1 != 1 || */ i2 != 2; }