// { dg-do run } // GROUPS passed templates extern "C" int printf (const char *, ...); extern "C" void exit (int); int count = 0; void die (int x) { if (x != ++count) { printf ("FAIL\n"); exit (1); } } class A { public: void f() const { die (-1); } }; template class B : public A { public: void f() const; }; template inline void B::f() const { die (1); } template class C : public A { public: void f() const { die (2); } }; int main() { B b; C c; b.f(); //- bugged, (A::f() called instead of B::f()) c.f(); //- works fine (C::f() called) printf ("PASS\n"); return 0; }