1 // PR c++/86476 - noexcept-specifier is a complete-class context 2 // { dg-do compile { target c++11 } } 3 4 int fn1 (); 5 int fn2 () noexcept; 6 int fn3 () noexcept; 7 8 void g() noexcept(noexcept (fn2())); 9 10 struct S1 { 11 friend void g1() noexcept(noexcept(fn2())); 12 friend void g1() noexcept(noexcept(fn1())); // { dg-error "different exception specifier" } 13 }; 14 15 struct S2 { 16 friend void g2() noexcept(noexcept(fn1())); 17 friend void g2() noexcept(noexcept(fn1())); 18 friend void g2() noexcept(noexcept(fn1())); 19 }; 20 21 struct S3 { 22 friend void g3() noexcept(noexcept(fn1())); 23 friend void g3() noexcept(noexcept(fn3())); // { dg-error "different exception specifier" } 24 }; 25 26 struct S4 { 27 friend void g4() noexcept(noexcept(fn2())); 28 friend void g4() noexcept(noexcept(fn3())); 29 }; 30 31 struct S5 { 32 friend void g() noexcept(noexcept(fn3())); 33 }; 34 35 struct S6 { 36 friend void g() noexcept(noexcept(fn1())); // { dg-error "different exception specifier" } 37 }; 38 39 struct S7 { 40 friend void gg() noexcept(noexcept(fn3())); 41 }; 42 43 void gg() noexcept(noexcept(fn1())); // { dg-error "different exception specifier" } 44 45 struct S8 { 46 friend void g8(); 47 friend void g8() noexcept(noexcept(fn2())); // { dg-error "different exception specifier" } 48 }; 49 50 struct S9 { 51 friend void g9(); 52 friend void g9() noexcept(noexcept(fn1())); 53 }; 54 55 struct S10 { 56 friend void g10() noexcept(noexcept(fn1())); 57 friend void g10(); 58 }; 59 60 struct S11 { 61 friend void g11() noexcept(noexcept(fn2())); 62 friend void g11(); // { dg-error "different exception specifier" } 63 }; 64 65 struct S12 { 66 friend void g12() noexcept(false); 67 friend void g12() noexcept(noexcept(fn2())); // { dg-error "different exception specifier" } 68 }; 69 70 struct S13 { 71 friend void g13() noexcept(false); 72 friend void g13() noexcept(noexcept(fn1())); 73 }; 74 75 struct S14 { 76 friend void g14() noexcept(noexcept(fn1())); 77 friend void g14() noexcept(false); 78 }; 79 80 struct S15 { 81 friend void g15() noexcept(noexcept(fn2())); 82 friend void g15() noexcept(false); // { dg-error "different exception specifier" } 83 }; 84