1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// PR c++/14369 struct A { }; template<class T> struct X : A { const A* bar() const { return this; } const A& foo() const; }; template<class T> const A& X<T>::foo() const { const A* t = bar(); return *(t ? t : throw 0); }