1 // PR c++/39106 2 // { dg-do compile } 3 // { dg-options "-O2" } 4 5 extern "C" void abort (); 6 7 struct A 8 { 9 A (bool x = true); 10 }; 11 class B 12 { 13 virtual bool bar (A &, int) const =0; 14 }; 15 class C : virtual public B 16 { 17 }; 18 struct D : virtual public B 19 { 20 bool bar (A &, int) const; 21 }; 22 template <int N> 23 struct E : public D 24 { barE25 bool bar (A &x, int y) const 26 { 27 return baz().bar (x, y); 28 } 29 const D & baz () const; 30 }; 31 extern template class E<0>; 32 33 void foo()34foo () 35 { 36 try 37 { 38 A a; 39 abort (); 40 } catch (...) 41 { 42 } 43 A b; 44 E<0> c; 45 c.bar (b, 3); 46 E<0> d; 47 d.bar (b, 3); 48 } 49