basedOpinionated utility library |
git clone git://git.dimitrijedobrota.com/based.git |
Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING |
signature_test_test.cpp (18121B)
0 #define CATCH_CONFIG_RUNTIME_STATIC_REQUIRE
2 #include "based/trait/signature.hpp"
4 #include <catch2/catch_test_macros.hpp>
6 #include "based/concepts/is/same.hpp"
8 // NOLINTBEGIN(*cognitive-complexity*)
10 namespace
11 {
13 // NOLINTNEXTLINE (*needed*)
14 int free_func(const double& a, int&& b) noexcept(false)
15 {
16 return static_cast<int>(a + b);
17 }
19 // NOLINTNEXTLINE (*needed*)
20 int free_func_noexcept(const double& a, int&& b) noexcept(true)
21 {
22 return static_cast<int>(a + b);
23 }
25 } // namespace
27 using based::SameAs;
29 TEST_CASE("free function", "[trait/signature]")
30 {
31 using sig = based::signature<decltype(free_func)>;
32 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
33 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
34 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
35 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
36 }
38 TEST_CASE("free function noexcept", "[trait/signature]")
39 {
40 using sig = based::signature<decltype(free_func_noexcept)>;
41 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
42 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
43 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
44 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
45 }
47 TEST_CASE("empty", "[trait/signature]")
48 {
49 struct test
50 {
51 int func(const double& a, int&& b) noexcept(false);
52 };
54 using sig = based::signature<decltype(&test::func)>;
55 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
56 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
57 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
58 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
59 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
60 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
61 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
62 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
63 }
65 TEST_CASE("const", "[trait/signature]")
66 {
67 struct test
68 {
69 int func(const double& a, int&& b) const noexcept(false);
70 };
72 using sig = based::signature<decltype(&test::func)>;
73 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
74 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
75 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
76 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
77 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
78 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
79 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
80 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
81 }
83 TEST_CASE("volatile", "[trait/signature]")
84 {
85 struct test
86 {
87 int func(const double& a, int&& b) volatile noexcept(false);
88 };
90 using sig = based::signature<decltype(&test::func)>;
91 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
92 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
93 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
94 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
95 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
96 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
97 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
98 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
99 }
101 TEST_CASE("const volatile", "[trait/signature]")
102 {
103 struct test
104 {
105 int func(const double& a, int&& b) const volatile noexcept(false);
106 };
108 using sig = based::signature<decltype(&test::func)>;
109 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
110 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
111 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
112 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
113 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
114 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
115 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
116 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
117 }
119 TEST_CASE("noexcept", "[trait/signature]")
120 {
121 struct test
122 {
123 int func(const double& a, int&& b) noexcept(true);
124 };
126 using sig = based::signature<decltype(&test::func)>;
127 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
128 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
129 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
130 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
131 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
132 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
133 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
134 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
135 }
137 TEST_CASE("const noexcept", "[trait/signature]")
138 {
139 struct test
140 {
141 int func(const double& a, int&& b) const noexcept(true);
142 };
144 using sig = based::signature<decltype(&test::func)>;
145 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
146 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
147 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
148 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
149 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
150 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
151 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
152 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
153 }
155 TEST_CASE("volatile noexcept", "[trait/signature]")
156 {
157 struct test
158 {
159 int func(const double& a, int&& b) volatile noexcept(true);
160 };
162 using sig = based::signature<decltype(&test::func)>;
163 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
164 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
165 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
166 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
167 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
168 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
169 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
170 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
171 }
173 TEST_CASE("const volatile noexcept", "[trait/signature]")
174 {
175 struct test
176 {
177 int func(const double& a, int&& b) const volatile noexcept(true);
178 };
180 using sig = based::signature<decltype(&test::func)>;
181 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
182 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
183 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
184 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
185 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
186 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
187 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
188 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
189 }
191 TEST_CASE("lvalref", "[trait/signature]")
192 {
193 struct test
194 {
195 int func(const double& a, int&& b) & noexcept(false);
196 };
198 using sig = based::signature<decltype(&test::func)>;
199 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
200 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
201 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
202 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
203 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
204 STATIC_REQUIRE(SameAs<based::true_type, sig::lvalref_val>);
205 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
206 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
207 }
209 TEST_CASE("const lvalref", "[trait/signature]")
210 {
211 struct test
212 {
213 int func(const double& a, int&& b) const& noexcept(false);
214 };
216 using sig = based::signature<decltype(&test::func)>;
217 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
218 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
219 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
220 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
221 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
222 STATIC_REQUIRE(SameAs<based::true_type, sig::lvalref_val>);
223 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
224 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
225 }
227 TEST_CASE("volatile lvalref", "[trait/signature]")
228 {
229 struct test
230 {
231 int func(const double& a, int&& b) volatile& noexcept(false);
232 };
234 using sig = based::signature<decltype(&test::func)>;
235 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
236 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
237 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
238 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
239 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
240 STATIC_REQUIRE(SameAs<based::true_type, sig::lvalref_val>);
241 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
242 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
243 }
245 TEST_CASE("const volatile lvalref", "[trait/signature]")
246 {
247 struct test
248 {
249 int func(const double& a, int&& b) const volatile& noexcept(false);
250 };
252 using sig = based::signature<decltype(&test::func)>;
253 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
254 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
255 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
256 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
257 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
258 STATIC_REQUIRE(SameAs<based::true_type, sig::lvalref_val>);
259 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
260 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
261 }
263 TEST_CASE("noexcept lvalref", "[trait/signature]")
264 {
265 struct test
266 {
267 int func(const double& a, int&& b) & noexcept(true);
268 };
270 using sig = based::signature<decltype(&test::func)>;
271 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
272 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
273 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
274 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
275 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
276 STATIC_REQUIRE(SameAs<based::true_type, sig::lvalref_val>);
277 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
278 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
279 }
281 TEST_CASE("const noexcept lvalref", "[trait/signature]")
282 {
283 struct test
284 {
285 int func(const double& a, int&& b) const& noexcept(true);
286 };
288 using sig = based::signature<decltype(&test::func)>;
289 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
290 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
291 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
292 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
293 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
294 STATIC_REQUIRE(SameAs<based::true_type, sig::lvalref_val>);
295 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
296 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
297 }
299 TEST_CASE("volatile noexcept lvalref", "[trait/signature]")
300 {
301 struct test
302 {
303 int func(const double& a, int&& b) volatile& noexcept(true);
304 };
306 using sig = based::signature<decltype(&test::func)>;
307 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
308 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
309 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
310 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
311 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
312 STATIC_REQUIRE(SameAs<based::true_type, sig::lvalref_val>);
313 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
314 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
315 }
317 TEST_CASE("const volatile noexcept lvalref", "[trait/signature]")
318 {
319 struct test
320 {
321 int func(const double& a, int&& b) const volatile& noexcept(true);
322 };
324 using sig = based::signature<decltype(&test::func)>;
325 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
326 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
327 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
328 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
329 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
330 STATIC_REQUIRE(SameAs<based::true_type, sig::lvalref_val>);
331 STATIC_REQUIRE(SameAs<based::false_type, sig::rvalref_val>);
332 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
333 }
335 TEST_CASE("rvalref", "[trait/signature]")
336 {
337 struct test
338 {
339 int func(const double& a, int&& b) && noexcept(false);
340 };
342 using sig = based::signature<decltype(&test::func)>;
343 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
344 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
345 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
346 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
347 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
348 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
349 STATIC_REQUIRE(SameAs<based::true_type, sig::rvalref_val>);
350 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
351 }
353 TEST_CASE("const rvalref", "[trait/signature]")
354 {
355 struct test
356 {
357 int func(const double& a, int&& b) const&& noexcept(false);
358 };
360 using sig = based::signature<decltype(&test::func)>;
361 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
362 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
363 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
364 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
365 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
366 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
367 STATIC_REQUIRE(SameAs<based::true_type, sig::rvalref_val>);
368 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
369 }
371 TEST_CASE("volatile rvalref", "[trait/signature]")
372 {
373 struct test
374 {
375 int func(const double& a, int&& b) volatile&& noexcept(false);
376 };
378 using sig = based::signature<decltype(&test::func)>;
379 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
380 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
381 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
382 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
383 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
384 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
385 STATIC_REQUIRE(SameAs<based::true_type, sig::rvalref_val>);
386 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
387 }
389 TEST_CASE("const volatile rvalref", "[trait/signature]")
390 {
391 struct test
392 {
393 int func(const double& a, int&& b) const volatile&& noexcept(false);
394 };
396 using sig = based::signature<decltype(&test::func)>;
397 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
398 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
399 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
400 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
401 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
402 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
403 STATIC_REQUIRE(SameAs<based::true_type, sig::rvalref_val>);
404 STATIC_REQUIRE(SameAs<based::false_type, sig::noexcept_val>);
405 }
407 TEST_CASE("noexcept rvalref", "[trait/signature]")
408 {
409 struct test
410 {
411 int func(const double& a, int&& b) && noexcept(true);
412 };
414 using sig = based::signature<decltype(&test::func)>;
415 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
416 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
417 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
418 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
419 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
420 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
421 STATIC_REQUIRE(SameAs<based::true_type, sig::rvalref_val>);
422 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
423 }
425 TEST_CASE("const noexcept rvalref", "[trait/signature]")
426 {
427 struct test
428 {
429 int func(const double& a, int&& b) const&& noexcept(true);
430 };
432 using sig = based::signature<decltype(&test::func)>;
433 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
434 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
435 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
436 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
437 STATIC_REQUIRE(SameAs<based::false_type, sig::volatile_val>);
438 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
439 STATIC_REQUIRE(SameAs<based::true_type, sig::rvalref_val>);
440 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
441 }
443 TEST_CASE("volatile noexcept rvalref", "[trait/signature]")
444 {
445 struct test
446 {
447 int func(const double& a, int&& b) volatile&& noexcept(true);
448 };
450 using sig = based::signature<decltype(&test::func)>;
451 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
452 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
453 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
454 STATIC_REQUIRE(SameAs<based::false_type, sig::const_val>);
455 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
456 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
457 STATIC_REQUIRE(SameAs<based::true_type, sig::rvalref_val>);
458 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
459 }
461 TEST_CASE("const volatile noexcept rvalref", "[trait/signature]")
462 {
463 struct test
464 {
465 int func(const double& a, int&& b) const volatile&& noexcept(true);
466 };
468 using sig = based::signature<decltype(&test::func)>;
469 STATIC_REQUIRE(SameAs<int(const double&, int&&), sig::sig_type>);
470 STATIC_REQUIRE(SameAs<std::tuple<const double&, int&&>, sig::arg_type>);
471 STATIC_REQUIRE(SameAs<int, sig::ret_type>);
472 STATIC_REQUIRE(SameAs<based::true_type, sig::const_val>);
473 STATIC_REQUIRE(SameAs<based::true_type, sig::volatile_val>);
474 STATIC_REQUIRE(SameAs<based::false_type, sig::lvalref_val>);
475 STATIC_REQUIRE(SameAs<based::true_type, sig::rvalref_val>);
476 STATIC_REQUIRE(SameAs<based::true_type, sig::noexcept_val>);
477 }
479 // NOLINTEND(*cognitive-complexity*)