1 // PR c++/86476 - noexcept-specifier is a complete-class context
2 // { dg-do compile { target c++11 } }
4 #define SA(X) static_assert(X, #X)
7 void f1() noexcept(noexcept(i)) { }
8 void f2() noexcept(noexcept(fn())) { }
9 void f3() noexcept(noexcept(fnx())) { }
10 void f4() noexcept(noexcept(i));
11 void f5() noexcept(noexcept(fn()));
12 void f6() noexcept(noexcept(fnx()));
14 void f7() noexcept(1);
15 void f8() noexcept(0);
16 void f9() noexcept(b);
17 void f10() noexcept(!b);
20 static constexpr auto b = true;
21 void fny() noexcept(noexcept(fn()));
28 SA(!noexcept(s.f2()));
31 SA(!noexcept(s.f5()));
34 SA(!noexcept(s.f8()));
36 SA(!noexcept(s.f10()));
40 void f1() noexcept(noexcept(fn()));
41 void f2() noexcept(noexcept(fnx()));
42 void f3() noexcept(noexcept(fn())) { }
43 void f4() noexcept(noexcept(fnx())) { }
52 SA(!noexcept(s2.v.f1()));
53 SA(noexcept(s2.v.f2()));
54 SA(!noexcept(s2.v.f3()));
55 SA(noexcept(s2.v.f4()));
58 void f1() noexcept(noexcept(fn()));
59 void f2() noexcept(noexcept(fnx()));
65 S3::f1() noexcept(noexcept(fn()))
70 S3::f2() noexcept(noexcept(fnx()))
75 int f1 (int p) noexcept(noexcept(p)) { return p; }
76 int f2 (int p) noexcept(noexcept(p));
77 int f3 (int p = 10) noexcept(noexcept(p));
78 int f4 () noexcept(noexcept(S4{}));
82 SA(noexcept(s4.f1(1)));
83 SA(noexcept(s4.f2(1)));
84 SA(noexcept(s4.f3()));
85 SA(noexcept(s4.f4()));
89 void f1() noexcept(noexcept(i)) { }
90 void f2() noexcept(noexcept(fn())) { }
91 void f3() noexcept(noexcept(fnx())) { }
92 void f4() noexcept(noexcept(i));
93 void f5() noexcept(noexcept(fn()));
94 void f6() noexcept(noexcept(fnx()));
97 void fny() noexcept(noexcept(fn()));
103 SA(noexcept(s5.f1()));
104 SA(!noexcept(s5.f2()));
105 SA(noexcept(s5.f3()));
106 SA(noexcept(s5.f4()));
107 SA(!noexcept(s5.f5()));
108 SA(noexcept(s5.f6()));
112 void f1() noexcept(noexcept(x));
118 void f1 () noexcept(noexcept(U(1))) { }
121 void f2() noexcept(noexcept(N));
123 template <typename _Up>
124 void f3(_Up __p) noexcept(noexcept(__p));
128 void globx() noexcept;
130 void f1 () noexcept(noexcept(glob()));
131 void f2 () noexcept(noexcept(globx()));
135 SA(!noexcept(s8.f1()));
136 SA(noexcept(s8.f2()));
139 constexpr operator bool();
144 S9() noexcept(noexcept(w)) { }
145 S9 &operator=(S9 &&) noexcept(T::X);