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