| // PR c++/86476 - noexcept-specifier is a complete-class context |
| // { dg-do compile { target c++11 } } |
| |
| int fn1 (); |
| int fn2 () noexcept; |
| int fn3 () noexcept; |
| |
| void g() noexcept(noexcept (fn2())); |
| |
| struct S1 { |
| friend void g1() noexcept(noexcept(fn2())); |
| friend void g1() noexcept(noexcept(fn1())); // { dg-error "different exception specifier" } |
| }; |
| |
| struct S2 { |
| friend void g2() noexcept(noexcept(fn1())); |
| friend void g2() noexcept(noexcept(fn1())); |
| friend void g2() noexcept(noexcept(fn1())); |
| }; |
| |
| struct S3 { |
| friend void g3() noexcept(noexcept(fn1())); |
| friend void g3() noexcept(noexcept(fn3())); // { dg-error "different exception specifier" } |
| }; |
| |
| struct S4 { |
| friend void g4() noexcept(noexcept(fn2())); |
| friend void g4() noexcept(noexcept(fn3())); |
| }; |
| |
| struct S5 { |
| friend void g() noexcept(noexcept(fn3())); |
| }; |
| |
| struct S6 { |
| friend void g() noexcept(noexcept(fn1())); // { dg-error "different exception specifier" } |
| }; |
| |
| struct S7 { |
| friend void gg() noexcept(noexcept(fn3())); |
| }; |
| |
| void gg() noexcept(noexcept(fn1())); // { dg-error "different exception specifier" } |
| |
| struct S8 { |
| friend void g8(); |
| friend void g8() noexcept(noexcept(fn2())); // { dg-error "different exception specifier" } |
| }; |
| |
| struct S9 { |
| friend void g9(); |
| friend void g9() noexcept(noexcept(fn1())); |
| }; |
| |
| struct S10 { |
| friend void g10() noexcept(noexcept(fn1())); |
| friend void g10(); |
| }; |
| |
| struct S11 { |
| friend void g11() noexcept(noexcept(fn2())); |
| friend void g11(); // { dg-error "different exception specifier" } |
| }; |
| |
| struct S12 { |
| friend void g12() noexcept(false); |
| friend void g12() noexcept(noexcept(fn2())); // { dg-error "different exception specifier" } |
| }; |
| |
| struct S13 { |
| friend void g13() noexcept(false); |
| friend void g13() noexcept(noexcept(fn1())); |
| }; |
| |
| struct S14 { |
| friend void g14() noexcept(noexcept(fn1())); |
| friend void g14() noexcept(false); |
| }; |
| |
| struct S15 { |
| friend void g15() noexcept(noexcept(fn2())); |
| friend void g15() noexcept(false); // { dg-error "different exception specifier" } |
| }; |