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