| // pr c++/79393 |
| // { dg-do compile { target c++14 } } |
| |
| struct A |
| { |
| friend class C; |
| private: |
| ~A () noexcept (false); |
| }; |
| |
| A::~A () noexcept(false) {} |
| |
| struct B : virtual A |
| { |
| // non-virtual, abstract, ignores A |
| ~B (); |
| virtual void abs () = 0; |
| }; |
| |
| B::~B () { |
| throw 1; // { dg-warning "will always call 'terminate'" } |
| } |
| |
| struct C : virtual A |
| { |
| // non-virtual, non-abstract, considers A |
| ~C (); |
| virtual void abs (); |
| }; |
| |
| C::~C () { |
| throw 1; |
| } |
| |
| struct D : virtual A |
| { |
| // virtual, abstract, considers A |
| virtual ~D (); |
| virtual void abs () = 0; |
| }; |
| |
| D::~D () { |
| throw 1; |
| } |