// { dg-do run } extern "C" void abort(); class X { public: virtual int f() const = 0; }; template <class T> class Y: public X { public: virtual int f() const; }; template <class T> int Y<T>::f() const { abort(); return 0; } template <> int Y<bool>::f() const; template <> int Y<bool>::f() const { return 0; } int main() { Y<bool> yb; yb.f(); }