// PR c++/50043 // { dg-do compile { target c++11 } } // { dg-options "-Wno-terminate" } struct True1 {}; struct True2 { ~True2(); }; struct True3 { ~True3(){ throw 0; } }; struct False { ~False() noexcept(false); }; template <typename Base> struct A : Base { }; template <typename Member> struct B { Member mem; }; template <typename Base, typename Member> struct C : Base { Member mem; }; #define SA(X) static_assert(X, #X) SA( noexcept(True1())); SA( noexcept(True2())); SA( noexcept(True3())); SA(!noexcept(False())); SA( noexcept(A<True1>())); SA( noexcept(A<True2>())); SA( noexcept(A<True3>())); SA(!noexcept(A<False>())); SA( noexcept(B<True1>())); SA( noexcept(B<True2>())); SA( noexcept(B<True3>())); SA(!noexcept(B<False>())); SA( noexcept(C<True1, True2>())); SA( noexcept(C<True1, True3>())); SA( noexcept(C<True2, True3>())); SA( noexcept(C<True2, True1>())); SA( noexcept(C<True3, True1>())); SA( noexcept(C<True3, True2>())); SA(!noexcept(C<False, True1>())); SA(!noexcept(C<False, True2>())); SA(!noexcept(C<False, True3>())); SA(!noexcept(C<True1, False>())); SA(!noexcept(C<True2, False>())); SA(!noexcept(C<True3, False>()));