1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // UNSUPPORTED: c++03, c++11, c++14, c++17 10 11 // template<class T, class U> 12 // concept equality_comparable_with = // see below 13 14 #include <concepts> 15 16 #include <array> 17 #include <cstddef> 18 #include <deque> 19 #include <forward_list> 20 #include <list> 21 #include <map> 22 #include <optional> 23 #include <vector> 24 25 #include "test_macros.h" 26 27 #ifndef TEST_HAS_NO_THREADS 28 # include <mutex> 29 #endif 30 31 #include "compare_types.h" 32 33 template <class T, class U> 34 constexpr bool check_equality_comparable_with() { 35 constexpr bool result = std::equality_comparable_with<T, U>; 36 static_assert(std::equality_comparable_with<U, T> == result); 37 static_assert(std::equality_comparable_with<T, U const> == result); 38 static_assert(std::equality_comparable_with<T const, U const> == result); 39 static_assert(std::equality_comparable_with<T, U const&> == result); 40 static_assert(std::equality_comparable_with<T const, U const&> == result); 41 static_assert(std::equality_comparable_with<T&, U const> == result); 42 static_assert(std::equality_comparable_with<T const&, U const> == result); 43 static_assert(std::equality_comparable_with<T&, U const&> == result); 44 static_assert(std::equality_comparable_with<T const&, U const&> == result); 45 static_assert(std::equality_comparable_with<T, U const&&> == result); 46 static_assert(std::equality_comparable_with<T const, U const&&> == result); 47 static_assert(std::equality_comparable_with<T&, U const&&> == result); 48 static_assert(std::equality_comparable_with<T const&, U const&&> == result); 49 static_assert(std::equality_comparable_with<T&&, U const> == result); 50 static_assert(std::equality_comparable_with<T const&&, U const> == result); 51 static_assert(std::equality_comparable_with<T&&, U const&> == result); 52 static_assert(std::equality_comparable_with<T const&&, U const&> == result); 53 static_assert(std::equality_comparable_with<T&&, U const&&> == result); 54 static_assert(std::equality_comparable_with<T const&&, U const&&> == result); 55 return result; 56 } 57 58 namespace fundamentals { 59 static_assert(check_equality_comparable_with<int, int>()); 60 static_assert(check_equality_comparable_with<int, bool>()); 61 static_assert(check_equality_comparable_with<int, char>()); 62 static_assert(check_equality_comparable_with<int, wchar_t>()); 63 static_assert(check_equality_comparable_with<int, double>()); 64 static_assert(!check_equality_comparable_with<int, int*>()); 65 static_assert(!check_equality_comparable_with<int, int[5]>()); 66 static_assert(!check_equality_comparable_with<int, int (*)()>()); 67 static_assert(!check_equality_comparable_with<int, int (&)()>()); 68 69 struct S {}; 70 static_assert(!check_equality_comparable_with<int, int S::*>()); 71 static_assert(!check_equality_comparable_with<int, int (S::*)()>()); 72 static_assert(!check_equality_comparable_with<int, int (S::*)() noexcept>()); 73 static_assert(!check_equality_comparable_with<int, int (S::*)() const>()); 74 static_assert( 75 !check_equality_comparable_with<int, int (S::*)() const noexcept>()); 76 static_assert(!check_equality_comparable_with<int, int (S::*)() volatile>()); 77 static_assert( 78 !check_equality_comparable_with<int, int (S::*)() volatile noexcept>()); 79 static_assert( 80 !check_equality_comparable_with<int, int (S::*)() const volatile>()); 81 static_assert(!check_equality_comparable_with< 82 int, int (S::*)() const volatile noexcept>()); 83 static_assert(!check_equality_comparable_with<int, int (S::*)() &>()); 84 static_assert(!check_equality_comparable_with<int, int (S::*)() & noexcept>()); 85 static_assert(!check_equality_comparable_with<int, int (S::*)() const&>()); 86 static_assert( 87 !check_equality_comparable_with<int, int (S::*)() const & noexcept>()); 88 static_assert(!check_equality_comparable_with<int, int (S::*)() volatile&>()); 89 static_assert( 90 !check_equality_comparable_with<int, int (S::*)() volatile & noexcept>()); 91 static_assert( 92 !check_equality_comparable_with<int, int (S::*)() const volatile&>()); 93 static_assert(!check_equality_comparable_with<int, int (S::*)() const volatile & 94 noexcept>()); 95 static_assert(!check_equality_comparable_with<int, int (S::*)() &&>()); 96 static_assert(!check_equality_comparable_with < int, 97 int (S::*)() && noexcept > ()); 98 static_assert(!check_equality_comparable_with<int, int (S::*)() const&&>()); 99 static_assert(!check_equality_comparable_with < int, 100 int (S::*)() const&& noexcept > ()); 101 static_assert(!check_equality_comparable_with<int, int (S::*)() volatile&&>()); 102 static_assert(!check_equality_comparable_with < int, 103 int (S::*)() volatile&& noexcept > ()); 104 static_assert( 105 !check_equality_comparable_with<int, int (S::*)() const volatile&&>()); 106 static_assert(!check_equality_comparable_with < int, 107 int (S::*)() const volatile&& noexcept > ()); 108 109 static_assert(check_equality_comparable_with<int*, int*>()); 110 static_assert(check_equality_comparable_with<int*, int[5]>()); 111 static_assert(!check_equality_comparable_with<int*, int (*)()>()); 112 static_assert(!check_equality_comparable_with<int*, int (&)()>()); 113 static_assert(!check_equality_comparable_with<int*, int (S::*)()>()); 114 static_assert(!check_equality_comparable_with<int*, int (S::*)() noexcept>()); 115 static_assert(!check_equality_comparable_with<int*, int (S::*)() const>()); 116 static_assert( 117 !check_equality_comparable_with<int*, int (S::*)() const noexcept>()); 118 static_assert(!check_equality_comparable_with<int*, int (S::*)() volatile>()); 119 static_assert( 120 !check_equality_comparable_with<int*, int (S::*)() volatile noexcept>()); 121 static_assert( 122 !check_equality_comparable_with<int*, int (S::*)() const volatile>()); 123 static_assert(!check_equality_comparable_with< 124 int*, int (S::*)() const volatile noexcept>()); 125 static_assert(!check_equality_comparable_with<int*, int (S::*)() &>()); 126 static_assert(!check_equality_comparable_with<int*, int (S::*)() & noexcept>()); 127 static_assert(!check_equality_comparable_with<int*, int (S::*)() const&>()); 128 static_assert( 129 !check_equality_comparable_with<int*, int (S::*)() const & noexcept>()); 130 static_assert(!check_equality_comparable_with<int*, int (S::*)() volatile&>()); 131 static_assert( 132 !check_equality_comparable_with<int*, int (S::*)() volatile & noexcept>()); 133 static_assert( 134 !check_equality_comparable_with<int*, int (S::*)() const volatile&>()); 135 static_assert(!check_equality_comparable_with< 136 int*, int (S::*)() const volatile & noexcept>()); 137 static_assert(!check_equality_comparable_with<int*, int (S::*)() &&>()); 138 static_assert(!check_equality_comparable_with < int*, 139 int (S::*)() && noexcept > ()); 140 static_assert(!check_equality_comparable_with<int*, int (S::*)() const&&>()); 141 static_assert(!check_equality_comparable_with < int*, 142 int (S::*)() const&& noexcept > ()); 143 static_assert(!check_equality_comparable_with<int*, int (S::*)() volatile&&>()); 144 static_assert(!check_equality_comparable_with < int*, 145 int (S::*)() volatile&& noexcept > ()); 146 static_assert( 147 !check_equality_comparable_with<int*, int (S::*)() const volatile&&>()); 148 static_assert(!check_equality_comparable_with < int*, 149 int (S::*)() const volatile&& noexcept > ()); 150 151 static_assert(check_equality_comparable_with<int[5], int[5]>()); 152 static_assert(!check_equality_comparable_with<int[5], int (*)()>()); 153 static_assert(!check_equality_comparable_with<int[5], int (&)()>()); 154 static_assert(!check_equality_comparable_with<int[5], int (S::*)()>()); 155 static_assert(!check_equality_comparable_with<int[5], int (S::*)() noexcept>()); 156 static_assert(!check_equality_comparable_with<int[5], int (S::*)() const>()); 157 static_assert( 158 !check_equality_comparable_with<int[5], int (S::*)() const noexcept>()); 159 static_assert(!check_equality_comparable_with<int[5], int (S::*)() volatile>()); 160 static_assert( 161 !check_equality_comparable_with<int[5], int (S::*)() volatile noexcept>()); 162 static_assert( 163 !check_equality_comparable_with<int[5], int (S::*)() const volatile>()); 164 static_assert(!check_equality_comparable_with< 165 int[5], int (S::*)() const volatile noexcept>()); 166 static_assert(!check_equality_comparable_with<int[5], int (S::*)() &>()); 167 static_assert( 168 !check_equality_comparable_with<int[5], int (S::*)() & noexcept>()); 169 static_assert(!check_equality_comparable_with<int[5], int (S::*)() const&>()); 170 static_assert( 171 !check_equality_comparable_with<int[5], int (S::*)() const & noexcept>()); 172 static_assert( 173 !check_equality_comparable_with<int[5], int (S::*)() volatile&>()); 174 static_assert(!check_equality_comparable_with<int[5], int (S::*)() volatile & 175 noexcept>()); 176 static_assert( 177 !check_equality_comparable_with<int[5], int (S::*)() const volatile&>()); 178 static_assert(!check_equality_comparable_with< 179 int[5], int (S::*)() const volatile & noexcept>()); 180 static_assert(!check_equality_comparable_with<int[5], int (S::*)() &&>()); 181 static_assert(!check_equality_comparable_with < int[5], 182 int (S::*)() && noexcept > ()); 183 static_assert(!check_equality_comparable_with<int[5], int (S::*)() const&&>()); 184 static_assert(!check_equality_comparable_with < int[5], 185 int (S::*)() const&& noexcept > ()); 186 static_assert( 187 !check_equality_comparable_with<int[5], int (S::*)() volatile&&>()); 188 static_assert(!check_equality_comparable_with < int[5], 189 int (S::*)() volatile&& noexcept > ()); 190 static_assert( 191 !check_equality_comparable_with<int[5], int (S::*)() const volatile&&>()); 192 static_assert(!check_equality_comparable_with < int[5], 193 int (S::*)() const volatile&& noexcept > ()); 194 195 static_assert(check_equality_comparable_with<int (*)(), int (*)()>()); 196 static_assert(check_equality_comparable_with<int (*)(), int (&)()>()); 197 static_assert(!check_equality_comparable_with<int (*)(), int (S::*)()>()); 198 static_assert( 199 !check_equality_comparable_with<int (*)(), int (S::*)() noexcept>()); 200 static_assert(!check_equality_comparable_with<int (*)(), int (S::*)() const>()); 201 static_assert( 202 !check_equality_comparable_with<int (*)(), int (S::*)() const noexcept>()); 203 static_assert( 204 !check_equality_comparable_with<int (*)(), int (S::*)() volatile>()); 205 static_assert(!check_equality_comparable_with< 206 int (*)(), int (S::*)() volatile noexcept>()); 207 static_assert( 208 !check_equality_comparable_with<int (*)(), int (S::*)() const volatile>()); 209 static_assert(!check_equality_comparable_with< 210 int (*)(), int (S::*)() const volatile noexcept>()); 211 static_assert(!check_equality_comparable_with<int (*)(), int (S::*)() &>()); 212 static_assert( 213 !check_equality_comparable_with<int (*)(), int (S::*)() & noexcept>()); 214 static_assert( 215 !check_equality_comparable_with<int (*)(), int (S::*)() const&>()); 216 static_assert(!check_equality_comparable_with<int (*)(), 217 int (S::*)() const & noexcept>()); 218 static_assert( 219 !check_equality_comparable_with<int (*)(), int (S::*)() volatile&>()); 220 static_assert(!check_equality_comparable_with<int (*)(), int (S::*)() volatile & 221 noexcept>()); 222 static_assert( 223 !check_equality_comparable_with<int (*)(), int (S::*)() const volatile&>()); 224 static_assert(!check_equality_comparable_with< 225 int (*)(), int (S::*)() const volatile & noexcept>()); 226 static_assert(!check_equality_comparable_with<int (*)(), int (S::*)() &&>()); 227 static_assert(!check_equality_comparable_with < int (*)(), 228 int (S::*)() && noexcept > ()); 229 static_assert( 230 !check_equality_comparable_with<int (*)(), int (S::*)() const&&>()); 231 static_assert(!check_equality_comparable_with < int (*)(), 232 int (S::*)() const&& noexcept > ()); 233 static_assert( 234 !check_equality_comparable_with<int (*)(), int (S::*)() volatile&&>()); 235 static_assert(!check_equality_comparable_with < int (*)(), 236 int (S::*)() volatile&& noexcept > ()); 237 static_assert(!check_equality_comparable_with<int (*)(), 238 int (S::*)() const volatile&&>()); 239 static_assert(!check_equality_comparable_with < int (*)(), 240 int (S::*)() const volatile&& noexcept > ()); 241 242 static_assert(check_equality_comparable_with<int (&)(), int (&)()>()); 243 static_assert(!check_equality_comparable_with<int (&)(), int (S::*)()>()); 244 static_assert( 245 !check_equality_comparable_with<int (&)(), int (S::*)() noexcept>()); 246 static_assert(!check_equality_comparable_with<int (&)(), int (S::*)() const>()); 247 static_assert( 248 !check_equality_comparable_with<int (&)(), int (S::*)() const noexcept>()); 249 static_assert( 250 !check_equality_comparable_with<int (&)(), int (S::*)() volatile>()); 251 static_assert(!check_equality_comparable_with< 252 int (&)(), int (S::*)() volatile noexcept>()); 253 static_assert( 254 !check_equality_comparable_with<int (&)(), int (S::*)() const volatile>()); 255 static_assert(!check_equality_comparable_with< 256 int (&)(), int (S::*)() const volatile noexcept>()); 257 static_assert(!check_equality_comparable_with<int (&)(), int (S::*)() &>()); 258 static_assert( 259 !check_equality_comparable_with<int (&)(), int (S::*)() & noexcept>()); 260 static_assert( 261 !check_equality_comparable_with<int (&)(), int (S::*)() const&>()); 262 static_assert(!check_equality_comparable_with<int (&)(), 263 int (S::*)() const & noexcept>()); 264 static_assert( 265 !check_equality_comparable_with<int (&)(), int (S::*)() volatile&>()); 266 static_assert(!check_equality_comparable_with<int (&)(), int (S::*)() volatile & 267 noexcept>()); 268 static_assert( 269 !check_equality_comparable_with<int (&)(), int (S::*)() const volatile&>()); 270 static_assert(!check_equality_comparable_with< 271 int (&)(), int (S::*)() const volatile & noexcept>()); 272 static_assert(!check_equality_comparable_with<int (&)(), int (S::*)() &&>()); 273 static_assert(!check_equality_comparable_with < int (&)(), 274 int (S::*)() && noexcept > ()); 275 static_assert( 276 !check_equality_comparable_with<int (&)(), int (S::*)() const&&>()); 277 static_assert(!check_equality_comparable_with < int (&)(), 278 int (S::*)() const&& noexcept > ()); 279 static_assert( 280 !check_equality_comparable_with<int (&)(), int (S::*)() volatile&&>()); 281 static_assert(!check_equality_comparable_with < int (&)(), 282 int (S::*)() volatile&& noexcept > ()); 283 static_assert(!check_equality_comparable_with<int (&)(), 284 int (S::*)() const volatile&&>()); 285 static_assert(!check_equality_comparable_with < int (&)(), 286 int (S::*)() const volatile&& noexcept > ()); 287 288 static_assert(check_equality_comparable_with<int (S::*)(), int (S::*)()>()); 289 static_assert( 290 check_equality_comparable_with<int (S::*)(), int (S::*)() noexcept>()); 291 static_assert( 292 !check_equality_comparable_with<int (S::*)(), int (S::*)() const>()); 293 static_assert(!check_equality_comparable_with<int (S::*)(), 294 int (S::*)() const noexcept>()); 295 static_assert( 296 !check_equality_comparable_with<int (S::*)(), int (S::*)() volatile>()); 297 static_assert(!check_equality_comparable_with< 298 int (S::*)(), int (S::*)() volatile noexcept>()); 299 static_assert(!check_equality_comparable_with<int (S::*)(), 300 int (S::*)() const volatile>()); 301 static_assert(!check_equality_comparable_with< 302 int (S::*)(), int (S::*)() const volatile noexcept>()); 303 static_assert(!check_equality_comparable_with<int (S::*)(), int (S::*)() &>()); 304 static_assert( 305 !check_equality_comparable_with<int (S::*)(), int (S::*)() & noexcept>()); 306 static_assert( 307 !check_equality_comparable_with<int (S::*)(), int (S::*)() const&>()); 308 static_assert(!check_equality_comparable_with<int (S::*)(), 309 int (S::*)() const & noexcept>()); 310 static_assert( 311 !check_equality_comparable_with<int (S::*)(), int (S::*)() volatile&>()); 312 static_assert(!check_equality_comparable_with< 313 int (S::*)(), int (S::*)() volatile & noexcept>()); 314 static_assert(!check_equality_comparable_with<int (S::*)(), 315 int (S::*)() const volatile&>()); 316 static_assert(!check_equality_comparable_with< 317 int (S::*)(), int (S::*)() const volatile & noexcept>()); 318 static_assert(!check_equality_comparable_with<int (S::*)(), int (S::*)() &&>()); 319 static_assert(!check_equality_comparable_with < int (S::*)(), 320 int (S::*)() && noexcept > ()); 321 static_assert( 322 !check_equality_comparable_with<int (S::*)(), int (S::*)() const&&>()); 323 static_assert(!check_equality_comparable_with < int (S::*)(), 324 int (S::*)() const&& noexcept > ()); 325 static_assert( 326 !check_equality_comparable_with<int (S::*)(), int (S::*)() volatile&&>()); 327 static_assert(!check_equality_comparable_with < int (S::*)(), 328 int (S::*)() volatile&& noexcept > ()); 329 static_assert(!check_equality_comparable_with<int (S::*)(), 330 int (S::*)() const volatile&&>()); 331 static_assert(!check_equality_comparable_with < int (S::*)(), 332 int (S::*)() const volatile&& noexcept > ()); 333 334 static_assert(check_equality_comparable_with<int (S::*)() noexcept, 335 int (S::*)() noexcept>()); 336 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 337 int (S::*)() const>()); 338 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 339 int (S::*)() const noexcept>()); 340 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 341 int (S::*)() volatile>()); 342 static_assert(!check_equality_comparable_with< 343 int (S::*)() noexcept, int (S::*)() volatile noexcept>()); 344 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 345 int (S::*)() const volatile>()); 346 static_assert(!check_equality_comparable_with< 347 int (S::*)() noexcept, int (S::*)() const volatile noexcept>()); 348 static_assert( 349 !check_equality_comparable_with<int (S::*)() noexcept, int (S::*)() &>()); 350 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 351 int (S::*)() & noexcept>()); 352 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 353 int (S::*)() const&>()); 354 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 355 int (S::*)() const & noexcept>()); 356 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 357 int (S::*)() volatile&>()); 358 static_assert(!check_equality_comparable_with< 359 int (S::*)() noexcept, int (S::*)() volatile & noexcept>()); 360 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 361 int (S::*)() const volatile&>()); 362 static_assert(!check_equality_comparable_with< 363 int (S::*)() noexcept, int (S::*)() const volatile & noexcept>()); 364 static_assert( 365 !check_equality_comparable_with<int (S::*)() noexcept, int (S::*)() &&>()); 366 static_assert(!check_equality_comparable_with < int (S::*)() noexcept, 367 int (S::*)() && noexcept > ()); 368 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 369 int (S::*)() const&&>()); 370 static_assert(!check_equality_comparable_with < int (S::*)() noexcept, 371 int (S::*)() const&& noexcept > ()); 372 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 373 int (S::*)() volatile&&>()); 374 static_assert(!check_equality_comparable_with < int (S::*)() noexcept, 375 int (S::*)() volatile&& noexcept > ()); 376 static_assert(!check_equality_comparable_with<int (S::*)() noexcept, 377 int (S::*)() const volatile&&>()); 378 static_assert(!check_equality_comparable_with < int (S::*)() noexcept, 379 int (S::*)() const volatile&& noexcept > ()); 380 381 static_assert( 382 check_equality_comparable_with<int (S::*)() const, int (S::*)() const>()); 383 static_assert(check_equality_comparable_with<int (S::*)() const, 384 int (S::*)() const noexcept>()); 385 static_assert(!check_equality_comparable_with<int (S::*)() const, 386 int (S::*)() volatile>()); 387 static_assert(!check_equality_comparable_with< 388 int (S::*)() const, int (S::*)() volatile noexcept>()); 389 static_assert(!check_equality_comparable_with<int (S::*)() const, 390 int (S::*)() const volatile>()); 391 static_assert(!check_equality_comparable_with< 392 int (S::*)() const, int (S::*)() const volatile noexcept>()); 393 static_assert( 394 !check_equality_comparable_with<int (S::*)() const, int (S::*)() &>()); 395 static_assert(!check_equality_comparable_with<int (S::*)() const, 396 int (S::*)() & noexcept>()); 397 static_assert( 398 !check_equality_comparable_with<int (S::*)() const, int (S::*)() const&>()); 399 static_assert(!check_equality_comparable_with<int (S::*)() const, 400 int (S::*)() const & noexcept>()); 401 static_assert(!check_equality_comparable_with<int (S::*)() const, 402 int (S::*)() volatile&>()); 403 static_assert(!check_equality_comparable_with< 404 int (S::*)() const, int (S::*)() volatile & noexcept>()); 405 static_assert(!check_equality_comparable_with<int (S::*)() const, 406 int (S::*)() const volatile&>()); 407 static_assert(!check_equality_comparable_with< 408 int (S::*)() const, int (S::*)() const volatile & noexcept>()); 409 static_assert( 410 !check_equality_comparable_with<int (S::*)() const, int (S::*)() &&>()); 411 static_assert(!check_equality_comparable_with < int (S::*)() const, 412 int (S::*)() && noexcept > ()); 413 static_assert(!check_equality_comparable_with<int (S::*)() const, 414 int (S::*)() const&&>()); 415 static_assert(!check_equality_comparable_with < int (S::*)() const, 416 int (S::*)() const&& noexcept > ()); 417 static_assert(!check_equality_comparable_with<int (S::*)() const, 418 int (S::*)() volatile&&>()); 419 static_assert(!check_equality_comparable_with < int (S::*)() const, 420 int (S::*)() volatile&& noexcept > ()); 421 static_assert(!check_equality_comparable_with<int (S::*)() const, 422 int (S::*)() const volatile&&>()); 423 static_assert(!check_equality_comparable_with < int (S::*)() const, 424 int (S::*)() const volatile&& noexcept > ()); 425 426 static_assert(check_equality_comparable_with<int (S::*)() const noexcept, 427 int (S::*)() const noexcept>()); 428 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 429 int (S::*)() volatile>()); 430 static_assert(!check_equality_comparable_with< 431 int (S::*)() const noexcept, int (S::*)() volatile noexcept>()); 432 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 433 int (S::*)() const volatile>()); 434 static_assert( 435 !check_equality_comparable_with<int (S::*)() const noexcept, 436 int (S::*)() const volatile noexcept>()); 437 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 438 int (S::*)() &>()); 439 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 440 int (S::*)() & noexcept>()); 441 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 442 int (S::*)() const&>()); 443 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 444 int (S::*)() const & noexcept>()); 445 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 446 int (S::*)() volatile&>()); 447 static_assert(!check_equality_comparable_with< 448 int (S::*)() const noexcept, int (S::*)() volatile & noexcept>()); 449 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 450 int (S::*)() const volatile&>()); 451 static_assert( 452 !check_equality_comparable_with<int (S::*)() const noexcept, 453 int (S::*)() const volatile & noexcept>()); 454 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 455 int (S::*)() &&>()); 456 static_assert(!check_equality_comparable_with < int (S::*)() const noexcept, 457 int (S::*)() && noexcept > ()); 458 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 459 int (S::*)() const&&>()); 460 static_assert(!check_equality_comparable_with < int (S::*)() const noexcept, 461 int (S::*)() const&& noexcept > ()); 462 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 463 int (S::*)() volatile&&>()); 464 static_assert(!check_equality_comparable_with < int (S::*)() const noexcept, 465 int (S::*)() volatile&& noexcept > ()); 466 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept, 467 int (S::*)() const volatile&&>()); 468 static_assert(!check_equality_comparable_with < int (S::*)() const noexcept, 469 int (S::*)() const volatile&& noexcept > ()); 470 471 static_assert(check_equality_comparable_with<int (S::*)() volatile, 472 int (S::*)() volatile>()); 473 static_assert(check_equality_comparable_with<int (S::*)() volatile, 474 int (S::*)() volatile noexcept>()); 475 static_assert(!check_equality_comparable_with<int (S::*)() volatile, 476 int (S::*)() const volatile>()); 477 static_assert(!check_equality_comparable_with< 478 int (S::*)() volatile, int (S::*)() const volatile noexcept>()); 479 static_assert( 480 !check_equality_comparable_with<int (S::*)() volatile, int (S::*)() &>()); 481 static_assert(!check_equality_comparable_with<int (S::*)() volatile, 482 int (S::*)() & noexcept>()); 483 static_assert(!check_equality_comparable_with<int (S::*)() volatile, 484 int (S::*)() const&>()); 485 static_assert(!check_equality_comparable_with<int (S::*)() volatile, 486 int (S::*)() const & noexcept>()); 487 static_assert(!check_equality_comparable_with<int (S::*)() volatile, 488 int (S::*)() volatile&>()); 489 static_assert(!check_equality_comparable_with< 490 int (S::*)() volatile, int (S::*)() volatile & noexcept>()); 491 static_assert(!check_equality_comparable_with<int (S::*)() volatile, 492 int (S::*)() const volatile&>()); 493 static_assert(!check_equality_comparable_with< 494 int (S::*)() volatile, int (S::*)() const volatile & noexcept>()); 495 static_assert( 496 !check_equality_comparable_with<int (S::*)() volatile, int (S::*)() &&>()); 497 static_assert(!check_equality_comparable_with < int (S::*)() volatile, 498 int (S::*)() && noexcept > ()); 499 static_assert(!check_equality_comparable_with<int (S::*)() volatile, 500 int (S::*)() const&&>()); 501 static_assert(!check_equality_comparable_with < int (S::*)() volatile, 502 int (S::*)() const&& noexcept > ()); 503 static_assert(!check_equality_comparable_with<int (S::*)() volatile, 504 int (S::*)() volatile&&>()); 505 static_assert(!check_equality_comparable_with < int (S::*)() volatile, 506 int (S::*)() volatile&& noexcept > ()); 507 static_assert(!check_equality_comparable_with<int (S::*)() volatile, 508 int (S::*)() const volatile&&>()); 509 static_assert(!check_equality_comparable_with < int (S::*)() volatile, 510 int (S::*)() const volatile&& noexcept > ()); 511 512 static_assert(check_equality_comparable_with<int (S::*)() volatile noexcept, 513 int (S::*)() volatile noexcept>()); 514 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept, 515 int (S::*)() const volatile>()); 516 static_assert( 517 !check_equality_comparable_with<int (S::*)() volatile noexcept, 518 int (S::*)() const volatile noexcept>()); 519 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept, 520 int (S::*)() &>()); 521 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept, 522 int (S::*)() & noexcept>()); 523 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept, 524 int (S::*)() const&>()); 525 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept, 526 int (S::*)() const & noexcept>()); 527 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept, 528 int (S::*)() volatile&>()); 529 static_assert( 530 !check_equality_comparable_with<int (S::*)() volatile noexcept, 531 int (S::*)() volatile & noexcept>()); 532 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept, 533 int (S::*)() const volatile&>()); 534 static_assert( 535 !check_equality_comparable_with<int (S::*)() volatile noexcept, 536 int (S::*)() const volatile & noexcept>()); 537 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept, 538 int (S::*)() &&>()); 539 static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept, 540 int (S::*)() && noexcept > ()); 541 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept, 542 int (S::*)() const&&>()); 543 static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept, 544 int (S::*)() const&& noexcept > ()); 545 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept, 546 int (S::*)() volatile&&>()); 547 static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept, 548 int (S::*)() volatile&& noexcept > ()); 549 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept, 550 int (S::*)() const volatile&&>()); 551 static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept, 552 int (S::*)() const volatile&& noexcept > ()); 553 554 static_assert(check_equality_comparable_with<int (S::*)() const volatile, 555 int (S::*)() const volatile>()); 556 static_assert( 557 check_equality_comparable_with<int (S::*)() const volatile, 558 int (S::*)() const volatile noexcept>()); 559 static_assert(!check_equality_comparable_with<int (S::*)() const volatile, 560 int (S::*)() &>()); 561 static_assert(!check_equality_comparable_with<int (S::*)() const volatile, 562 int (S::*)() & noexcept>()); 563 static_assert(!check_equality_comparable_with<int (S::*)() const volatile, 564 int (S::*)() const&>()); 565 static_assert(!check_equality_comparable_with<int (S::*)() const volatile, 566 int (S::*)() const & noexcept>()); 567 static_assert(!check_equality_comparable_with<int (S::*)() const volatile, 568 int (S::*)() volatile&>()); 569 static_assert(!check_equality_comparable_with< 570 int (S::*)() const volatile, int (S::*)() volatile & noexcept>()); 571 static_assert(!check_equality_comparable_with<int (S::*)() const volatile, 572 int (S::*)() const volatile&>()); 573 static_assert( 574 !check_equality_comparable_with<int (S::*)() const volatile, 575 int (S::*)() const volatile & noexcept>()); 576 static_assert(!check_equality_comparable_with<int (S::*)() const volatile, 577 int (S::*)() &&>()); 578 static_assert(!check_equality_comparable_with < int (S::*)() const volatile, 579 int (S::*)() && noexcept > ()); 580 static_assert(!check_equality_comparable_with<int (S::*)() const volatile, 581 int (S::*)() const&&>()); 582 static_assert(!check_equality_comparable_with < int (S::*)() const volatile, 583 int (S::*)() const&& noexcept > ()); 584 static_assert(!check_equality_comparable_with<int (S::*)() const volatile, 585 int (S::*)() volatile&&>()); 586 static_assert(!check_equality_comparable_with < int (S::*)() const volatile, 587 int (S::*)() volatile&& noexcept > ()); 588 static_assert(!check_equality_comparable_with<int (S::*)() const volatile, 589 int (S::*)() const volatile&&>()); 590 static_assert(!check_equality_comparable_with < int (S::*)() const volatile, 591 int (S::*)() const volatile&& noexcept > ()); 592 593 static_assert( 594 check_equality_comparable_with<int (S::*)() const volatile noexcept, 595 int (S::*)() const volatile noexcept>()); 596 static_assert(!check_equality_comparable_with< 597 int (S::*)() const volatile noexcept, int (S::*)() &>()); 598 static_assert(!check_equality_comparable_with< 599 int (S::*)() const volatile noexcept, int (S::*)() & noexcept>()); 600 static_assert(!check_equality_comparable_with< 601 int (S::*)() const volatile noexcept, int (S::*)() const&>()); 602 static_assert( 603 !check_equality_comparable_with<int (S::*)() const volatile noexcept, 604 int (S::*)() const & noexcept>()); 605 static_assert(!check_equality_comparable_with< 606 int (S::*)() const volatile noexcept, int (S::*)() volatile&>()); 607 static_assert( 608 !check_equality_comparable_with<int (S::*)() const volatile noexcept, 609 int (S::*)() volatile & noexcept>()); 610 static_assert( 611 !check_equality_comparable_with<int (S::*)() const volatile noexcept, 612 int (S::*)() const volatile&>()); 613 static_assert( 614 !check_equality_comparable_with<int (S::*)() const volatile noexcept, 615 int (S::*)() const volatile & noexcept>()); 616 static_assert(!check_equality_comparable_with< 617 int (S::*)() const volatile noexcept, int (S::*)() &&>()); 618 static_assert(!check_equality_comparable_with < int (S::*)() 619 const volatile noexcept, 620 int (S::*)() && noexcept > ()); 621 static_assert(!check_equality_comparable_with< 622 int (S::*)() const volatile noexcept, int (S::*)() const&&>()); 623 static_assert(!check_equality_comparable_with < int (S::*)() 624 const volatile noexcept, 625 int (S::*)() const&& noexcept > ()); 626 static_assert(!check_equality_comparable_with< 627 int (S::*)() const volatile noexcept, int (S::*)() volatile&&>()); 628 static_assert(!check_equality_comparable_with < int (S::*)() 629 const volatile noexcept, 630 int (S::*)() volatile&& noexcept > ()); 631 static_assert( 632 !check_equality_comparable_with<int (S::*)() const volatile noexcept, 633 int (S::*)() const volatile&&>()); 634 static_assert(!check_equality_comparable_with < int (S::*)() 635 const volatile noexcept, 636 int (S::*)() const volatile&& noexcept > ()); 637 638 static_assert(check_equality_comparable_with<int (S::*)() &, int (S::*)() &>()); 639 static_assert( 640 check_equality_comparable_with<int (S::*)() &, int (S::*)() & noexcept>()); 641 static_assert( 642 !check_equality_comparable_with<int (S::*)() &, int (S::*)() const&>()); 643 static_assert(!check_equality_comparable_with<int (S::*)() &, 644 int (S::*)() const & noexcept>()); 645 static_assert( 646 !check_equality_comparable_with<int (S::*)() &, int (S::*)() volatile&>()); 647 static_assert(!check_equality_comparable_with< 648 int (S::*)() &, int (S::*)() volatile & noexcept>()); 649 static_assert(!check_equality_comparable_with<int (S::*)() &, 650 int (S::*)() const volatile&>()); 651 static_assert(!check_equality_comparable_with< 652 int (S::*)() &, int (S::*)() const volatile & noexcept>()); 653 static_assert( 654 !check_equality_comparable_with<int (S::*)() &, int (S::*)() &&>()); 655 static_assert(!check_equality_comparable_with < int (S::*)() &, 656 int (S::*)() && noexcept > ()); 657 static_assert( 658 !check_equality_comparable_with<int (S::*)() &, int (S::*)() const&&>()); 659 static_assert(!check_equality_comparable_with < int (S::*)() &, 660 int (S::*)() const&& noexcept > ()); 661 static_assert( 662 !check_equality_comparable_with<int (S::*)() &, int (S::*)() volatile&&>()); 663 static_assert(!check_equality_comparable_with < int (S::*)() &, 664 int (S::*)() volatile&& noexcept > ()); 665 static_assert(!check_equality_comparable_with<int (S::*)() &, 666 int (S::*)() const volatile&&>()); 667 static_assert(!check_equality_comparable_with < int (S::*)() &, 668 int (S::*)() const volatile&& noexcept > ()); 669 670 static_assert(check_equality_comparable_with<int (S::*)() & noexcept, 671 int (S::*)() & noexcept>()); 672 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept, 673 int (S::*)() const&>()); 674 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept, 675 int (S::*)() const & noexcept>()); 676 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept, 677 int (S::*)() volatile&>()); 678 static_assert(!check_equality_comparable_with< 679 int (S::*)() & noexcept, int (S::*)() volatile & noexcept>()); 680 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept, 681 int (S::*)() const volatile&>()); 682 static_assert( 683 !check_equality_comparable_with<int (S::*)() & noexcept, 684 int (S::*)() const volatile & noexcept>()); 685 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept, 686 int (S::*)() &&>()); 687 static_assert(!check_equality_comparable_with < int (S::*)() & noexcept, 688 int (S::*)() && noexcept > ()); 689 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept, 690 int (S::*)() const&&>()); 691 static_assert(!check_equality_comparable_with < int (S::*)() & noexcept, 692 int (S::*)() const&& noexcept > ()); 693 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept, 694 int (S::*)() volatile&&>()); 695 static_assert(!check_equality_comparable_with < int (S::*)() & noexcept, 696 int (S::*)() volatile&& noexcept > ()); 697 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept, 698 int (S::*)() const volatile&&>()); 699 static_assert(!check_equality_comparable_with < int (S::*)() & noexcept, 700 int (S::*)() const volatile&& noexcept > ()); 701 702 static_assert( 703 check_equality_comparable_with<int (S::*)() const&, int (S::*)() const&>()); 704 static_assert(check_equality_comparable_with<int (S::*)() const&, 705 int (S::*)() const & noexcept>()); 706 static_assert(!check_equality_comparable_with<int (S::*)() const&, 707 int (S::*)() volatile&>()); 708 static_assert(!check_equality_comparable_with< 709 int (S::*)() const&, int (S::*)() volatile & noexcept>()); 710 static_assert(!check_equality_comparable_with<int (S::*)() const&, 711 int (S::*)() const volatile&>()); 712 static_assert(!check_equality_comparable_with< 713 int (S::*)() const&, int (S::*)() const volatile & noexcept>()); 714 static_assert( 715 !check_equality_comparable_with<int (S::*)() const&, int (S::*)() &&>()); 716 static_assert(!check_equality_comparable_with < int (S::*)() const&, 717 int (S::*)() && noexcept > ()); 718 static_assert(!check_equality_comparable_with<int (S::*)() const&, 719 int (S::*)() const&&>()); 720 static_assert(!check_equality_comparable_with < int (S::*)() const&, 721 int (S::*)() const&& noexcept > ()); 722 static_assert(!check_equality_comparable_with<int (S::*)() const&, 723 int (S::*)() volatile&&>()); 724 static_assert(!check_equality_comparable_with < int (S::*)() const&, 725 int (S::*)() volatile&& noexcept > ()); 726 static_assert(!check_equality_comparable_with<int (S::*)() const&, 727 int (S::*)() const volatile&&>()); 728 static_assert(!check_equality_comparable_with < int (S::*)() const&, 729 int (S::*)() const volatile&& noexcept > ()); 730 731 static_assert(check_equality_comparable_with<int (S::*)() const & noexcept, 732 int (S::*)() const & noexcept>()); 733 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept, 734 int (S::*)() volatile&>()); 735 static_assert( 736 !check_equality_comparable_with<int (S::*)() const & noexcept, 737 int (S::*)() volatile & noexcept>()); 738 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept, 739 int (S::*)() const volatile&>()); 740 static_assert( 741 !check_equality_comparable_with<int (S::*)() const & noexcept, 742 int (S::*)() const volatile & noexcept>()); 743 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept, 744 int (S::*)() &&>()); 745 static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept, 746 int (S::*)() && noexcept > ()); 747 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept, 748 int (S::*)() const&&>()); 749 static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept, 750 int (S::*)() const&& noexcept > ()); 751 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept, 752 int (S::*)() volatile&&>()); 753 static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept, 754 int (S::*)() volatile&& noexcept > ()); 755 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept, 756 int (S::*)() const volatile&&>()); 757 static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept, 758 int (S::*)() const volatile&& noexcept > ()); 759 760 static_assert(check_equality_comparable_with<int (S::*)() volatile&, 761 int (S::*)() volatile&>()); 762 static_assert(check_equality_comparable_with< 763 int (S::*)() volatile&, int (S::*)() volatile & noexcept>()); 764 static_assert(!check_equality_comparable_with<int (S::*)() volatile&, 765 int (S::*)() const volatile&>()); 766 static_assert( 767 !check_equality_comparable_with<int (S::*)() volatile&, 768 int (S::*)() const volatile & noexcept>()); 769 static_assert( 770 !check_equality_comparable_with<int (S::*)() volatile&, int (S::*)() &&>()); 771 static_assert(!check_equality_comparable_with < int (S::*)() volatile&, 772 int (S::*)() && noexcept > ()); 773 static_assert(!check_equality_comparable_with<int (S::*)() volatile&, 774 int (S::*)() const&&>()); 775 static_assert(!check_equality_comparable_with < int (S::*)() volatile&, 776 int (S::*)() const&& noexcept > ()); 777 static_assert(!check_equality_comparable_with<int (S::*)() volatile&, 778 int (S::*)() volatile&&>()); 779 static_assert(!check_equality_comparable_with < int (S::*)() volatile&, 780 int (S::*)() volatile&& noexcept > ()); 781 static_assert(!check_equality_comparable_with<int (S::*)() volatile&, 782 int (S::*)() const volatile&&>()); 783 static_assert(!check_equality_comparable_with < int (S::*)() volatile&, 784 int (S::*)() const volatile&& noexcept > ()); 785 786 static_assert( 787 check_equality_comparable_with<int (S::*)() volatile & noexcept, 788 int (S::*)() volatile & noexcept>()); 789 static_assert(!check_equality_comparable_with<int (S::*)() volatile & noexcept, 790 int (S::*)() const volatile&>()); 791 static_assert( 792 !check_equality_comparable_with<int (S::*)() volatile & noexcept, 793 int (S::*)() const volatile & noexcept>()); 794 static_assert(!check_equality_comparable_with<int (S::*)() volatile & noexcept, 795 int (S::*)() &&>()); 796 static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept, 797 int (S::*)() && noexcept > ()); 798 static_assert(!check_equality_comparable_with<int (S::*)() volatile & noexcept, 799 int (S::*)() const&&>()); 800 static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept, 801 int (S::*)() const&& noexcept > ()); 802 static_assert(!check_equality_comparable_with<int (S::*)() volatile & noexcept, 803 int (S::*)() volatile&&>()); 804 static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept, 805 int (S::*)() volatile&& noexcept > ()); 806 static_assert(!check_equality_comparable_with<int (S::*)() volatile & noexcept, 807 int (S::*)() const volatile&&>()); 808 static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept, 809 int (S::*)() const volatile&& noexcept > ()); 810 811 static_assert(check_equality_comparable_with<int (S::*)() const volatile&, 812 int (S::*)() const volatile&>()); 813 static_assert( 814 check_equality_comparable_with<int (S::*)() const volatile&, 815 int (S::*)() const volatile & noexcept>()); 816 static_assert(!check_equality_comparable_with<int (S::*)() const volatile&, 817 int (S::*)() &&>()); 818 static_assert(!check_equality_comparable_with < int (S::*)() const volatile&, 819 int (S::*)() && noexcept > ()); 820 static_assert(!check_equality_comparable_with<int (S::*)() const volatile&, 821 int (S::*)() const&&>()); 822 static_assert(!check_equality_comparable_with < int (S::*)() const volatile&, 823 int (S::*)() const&& noexcept > ()); 824 static_assert(!check_equality_comparable_with<int (S::*)() const volatile&, 825 int (S::*)() volatile&&>()); 826 static_assert(!check_equality_comparable_with < int (S::*)() const volatile&, 827 int (S::*)() volatile&& noexcept > ()); 828 static_assert(!check_equality_comparable_with<int (S::*)() const volatile&, 829 int (S::*)() const volatile&&>()); 830 static_assert(!check_equality_comparable_with < int (S::*)() const volatile&, 831 int (S::*)() const volatile&& noexcept > ()); 832 833 static_assert( 834 check_equality_comparable_with<int (S::*)() const volatile & noexcept, 835 int (S::*)() const volatile & noexcept>()); 836 static_assert(!check_equality_comparable_with< 837 int (S::*)() const volatile & noexcept, int (S::*)() &&>()); 838 static_assert(!check_equality_comparable_with < int (S::*)() 839 const volatile& noexcept, 840 int (S::*)() && noexcept > ()); 841 static_assert(!check_equality_comparable_with< 842 int (S::*)() const volatile & noexcept, int (S::*)() const&&>()); 843 static_assert(!check_equality_comparable_with < int (S::*)() 844 const volatile& noexcept, 845 int (S::*)() const&& noexcept > ()); 846 static_assert( 847 !check_equality_comparable_with<int (S::*)() const volatile & noexcept, 848 int (S::*)() volatile&&>()); 849 static_assert(!check_equality_comparable_with < int (S::*)() 850 const volatile& noexcept, 851 int (S::*)() volatile&& noexcept > ()); 852 static_assert( 853 !check_equality_comparable_with<int (S::*)() const volatile & noexcept, 854 int (S::*)() const volatile&&>()); 855 static_assert(!check_equality_comparable_with < int (S::*)() 856 const volatile& noexcept, 857 int (S::*)() const volatile&& noexcept > ()); 858 859 static_assert( 860 check_equality_comparable_with<int (S::*)() &&, int (S::*)() &&>()); 861 static_assert(check_equality_comparable_with<int (S::*)() &&, 862 int (S::*)() && noexcept>()); 863 static_assert( 864 !check_equality_comparable_with<int (S::*)() &&, int (S::*)() const&&>()); 865 static_assert(!check_equality_comparable_with < int (S::*)() &&, 866 int (S::*)() const&& noexcept > ()); 867 static_assert(!check_equality_comparable_with<int (S::*)() &&, 868 int (S::*)() volatile&&>()); 869 static_assert(!check_equality_comparable_with < int (S::*)() &&, 870 int (S::*)() volatile&& noexcept > ()); 871 static_assert(!check_equality_comparable_with<int (S::*)() &&, 872 int (S::*)() const volatile&&>()); 873 static_assert(!check_equality_comparable_with < int (S::*)() &&, 874 int (S::*)() const volatile&& noexcept > ()); 875 876 static_assert(check_equality_comparable_with<int (S::*)() && noexcept, 877 int (S::*)() && noexcept>()); 878 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, 879 int (S::*)() const&& > ()); 880 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, 881 int (S::*)() const&& noexcept > ()); 882 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, 883 int (S::*)() volatile&& > ()); 884 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, 885 int (S::*)() volatile&& noexcept > ()); 886 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, 887 int (S::*)() const volatile&& > ()); 888 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, 889 int (S::*)() const volatile&& noexcept > ()); 890 891 static_assert(check_equality_comparable_with<int (S::*)() const&&, 892 int (S::*)() const&&>()); 893 static_assert(check_equality_comparable_with<int (S::*)() const&&, 894 int (S::*)() const && noexcept>()); 895 static_assert(!check_equality_comparable_with<int (S::*)() const&&, 896 int (S::*)() volatile&&>()); 897 static_assert(!check_equality_comparable_with < int (S::*)() const&&, 898 int (S::*)() volatile&& noexcept > ()); 899 static_assert(!check_equality_comparable_with<int (S::*)() const&&, 900 int (S::*)() const volatile&&>()); 901 static_assert(!check_equality_comparable_with < int (S::*)() const&&, 902 int (S::*)() const volatile&& noexcept > ()); 903 904 static_assert(check_equality_comparable_with<int (S::*)() const && noexcept, 905 int (S::*)() const && noexcept>()); 906 static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept, 907 int (S::*)() volatile&& > ()); 908 static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept, 909 int (S::*)() volatile&& noexcept > ()); 910 static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept, 911 int (S::*)() const volatile&& > ()); 912 static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept, 913 int (S::*)() const volatile&& noexcept > ()); 914 915 static_assert(check_equality_comparable_with<int (S::*)() volatile&&, 916 int (S::*)() volatile&&>()); 917 static_assert(check_equality_comparable_with< 918 int (S::*)() volatile&&, int (S::*)() volatile && noexcept>()); 919 static_assert(!check_equality_comparable_with<int (S::*)() volatile&&, 920 int (S::*)() const volatile&&>()); 921 static_assert(!check_equality_comparable_with < int (S::*)() volatile&&, 922 int (S::*)() const volatile&& noexcept > ()); 923 924 static_assert( 925 check_equality_comparable_with<int (S::*)() volatile && noexcept, 926 int (S::*)() volatile && noexcept>()); 927 static_assert(!check_equality_comparable_with < 928 int (S::*)() volatile&& noexcept, 929 int (S::*)() const volatile&& > ()); 930 static_assert(!check_equality_comparable_with < 931 int (S::*)() volatile&& noexcept, 932 int (S::*)() const volatile&& noexcept > ()); 933 934 static_assert(check_equality_comparable_with<int (S::*)() const volatile&&, 935 int (S::*)() const volatile&&>()); 936 static_assert( 937 check_equality_comparable_with<int (S::*)() const volatile&&, 938 int (S::*)() const volatile && noexcept>()); 939 static_assert( 940 check_equality_comparable_with<int (S::*)() const volatile && noexcept, 941 int (S::*)() const volatile && noexcept>()); 942 943 static_assert(!check_equality_comparable_with<std::nullptr_t, int>()); 944 static_assert(check_equality_comparable_with<std::nullptr_t, int*>()); 945 static_assert(check_equality_comparable_with<std::nullptr_t, int[5]>()); 946 static_assert(check_equality_comparable_with<std::nullptr_t, int (*)()>()); 947 static_assert(check_equality_comparable_with<std::nullptr_t, int (&)()>()); 948 static_assert(check_equality_comparable_with<std::nullptr_t, int (S::*)()>()); 949 static_assert( 950 check_equality_comparable_with<std::nullptr_t, int (S::*)() noexcept>()); 951 static_assert( 952 check_equality_comparable_with<std::nullptr_t, int (S::*)() const>()); 953 static_assert(check_equality_comparable_with<std::nullptr_t, 954 int (S::*)() const noexcept>()); 955 static_assert( 956 check_equality_comparable_with<std::nullptr_t, int (S::*)() volatile>()); 957 static_assert(check_equality_comparable_with<std::nullptr_t, 958 int (S::*)() volatile noexcept>()); 959 static_assert(check_equality_comparable_with<std::nullptr_t, 960 int (S::*)() const volatile>()); 961 static_assert(check_equality_comparable_with< 962 std::nullptr_t, int (S::*)() const volatile noexcept>()); 963 static_assert(check_equality_comparable_with<std::nullptr_t, int (S::*)() &>()); 964 static_assert( 965 check_equality_comparable_with<std::nullptr_t, int (S::*)() & noexcept>()); 966 static_assert( 967 check_equality_comparable_with<std::nullptr_t, int (S::*)() const&>()); 968 static_assert(check_equality_comparable_with<std::nullptr_t, 969 int (S::*)() const & noexcept>()); 970 static_assert( 971 check_equality_comparable_with<std::nullptr_t, int (S::*)() volatile&>()); 972 static_assert(check_equality_comparable_with< 973 std::nullptr_t, int (S::*)() volatile & noexcept>()); 974 static_assert(check_equality_comparable_with<std::nullptr_t, 975 int (S::*)() const volatile&>()); 976 static_assert(check_equality_comparable_with< 977 std::nullptr_t, int (S::*)() const volatile & noexcept>()); 978 static_assert( 979 check_equality_comparable_with<std::nullptr_t, int (S::*)() &&>()); 980 static_assert( 981 check_equality_comparable_with<std::nullptr_t, int (S::*)() && noexcept>()); 982 static_assert( 983 check_equality_comparable_with<std::nullptr_t, int (S::*)() const&&>()); 984 static_assert(check_equality_comparable_with<std::nullptr_t, 985 int (S::*)() const && noexcept>()); 986 static_assert( 987 check_equality_comparable_with<std::nullptr_t, int (S::*)() volatile&&>()); 988 static_assert(check_equality_comparable_with< 989 std::nullptr_t, int (S::*)() volatile && noexcept>()); 990 static_assert(check_equality_comparable_with<std::nullptr_t, 991 int (S::*)() const volatile&&>()); 992 static_assert(check_equality_comparable_with< 993 std::nullptr_t, int (S::*)() const volatile && noexcept>()); 994 995 static_assert(!std::equality_comparable_with<void, int>); 996 static_assert(!std::equality_comparable_with<void, int*>); 997 static_assert(!std::equality_comparable_with<void, std::nullptr_t>); 998 static_assert(!std::equality_comparable_with<void, int[5]>); 999 static_assert(!std::equality_comparable_with<void, int (*)()>); 1000 static_assert(!std::equality_comparable_with<void, int (&)()>); 1001 static_assert(!std::equality_comparable_with<void, int S::*>); 1002 static_assert(!std::equality_comparable_with<void, int (S::*)()>); 1003 static_assert(!std::equality_comparable_with<void, int (S::*)() noexcept>); 1004 static_assert(!std::equality_comparable_with<void, int (S::*)() const>); 1005 static_assert( 1006 !std::equality_comparable_with<void, int (S::*)() const noexcept>); 1007 static_assert(!std::equality_comparable_with<void, int (S::*)() volatile>); 1008 static_assert( 1009 !std::equality_comparable_with<void, int (S::*)() volatile noexcept>); 1010 static_assert( 1011 !std::equality_comparable_with<void, int (S::*)() const volatile>); 1012 static_assert( 1013 !std::equality_comparable_with<void, int (S::*)() const volatile noexcept>); 1014 static_assert(!std::equality_comparable_with<void, int (S::*)() &>); 1015 static_assert(!std::equality_comparable_with<void, int (S::*)() & noexcept>); 1016 static_assert(!std::equality_comparable_with<void, int (S::*)() const&>); 1017 static_assert( 1018 !std::equality_comparable_with<void, int (S::*)() const & noexcept>); 1019 static_assert(!std::equality_comparable_with<void, int (S::*)() volatile&>); 1020 static_assert( 1021 !std::equality_comparable_with<void, int (S::*)() volatile & noexcept>); 1022 static_assert( 1023 !std::equality_comparable_with<void, int (S::*)() const volatile&>); 1024 static_assert(!std::equality_comparable_with<void, int (S::*)() const volatile & 1025 noexcept>); 1026 static_assert(!std::equality_comparable_with<void, int (S::*)() &&>); 1027 static_assert(!std::equality_comparable_with < void, 1028 int (S::*)() && noexcept >); 1029 static_assert(!std::equality_comparable_with<void, int (S::*)() const&&>); 1030 static_assert(!std::equality_comparable_with < void, 1031 int (S::*)() const&& noexcept >); 1032 static_assert(!std::equality_comparable_with<void, int (S::*)() volatile&&>); 1033 static_assert(!std::equality_comparable_with < void, 1034 int (S::*)() volatile&& noexcept >); 1035 static_assert( 1036 !std::equality_comparable_with<void, int (S::*)() const volatile&&>); 1037 static_assert(!std::equality_comparable_with < void, 1038 int (S::*)() const volatile&& noexcept >); 1039 } // namespace fundamentals 1040 1041 namespace standard_types { 1042 static_assert(check_equality_comparable_with<std::array<int, 10>, 1043 std::array<int, 10> >()); 1044 static_assert(!check_equality_comparable_with<std::array<int, 10>, 1045 std::array<double, 10> >()); 1046 static_assert( 1047 check_equality_comparable_with<std::deque<int>, std::deque<int> >()); 1048 static_assert( 1049 !check_equality_comparable_with<std::deque<int>, std::vector<int> >()); 1050 static_assert(check_equality_comparable_with<std::forward_list<int>, 1051 std::forward_list<int> >()); 1052 static_assert(!check_equality_comparable_with<std::forward_list<int>, 1053 std::vector<int> >()); 1054 static_assert( 1055 check_equality_comparable_with<std::list<int>, std::list<int> >()); 1056 static_assert( 1057 !check_equality_comparable_with<std::list<int>, std::vector<int> >()); 1058 1059 #ifndef TEST_HAS_NO_THREADS 1060 static_assert(!check_equality_comparable_with<std::lock_guard<std::mutex>, 1061 std::lock_guard<std::mutex> >()); 1062 static_assert(!check_equality_comparable_with<std::lock_guard<std::mutex>, 1063 std::vector<int> >()); 1064 static_assert(!check_equality_comparable_with<std::mutex, std::mutex>()); 1065 static_assert(!check_equality_comparable_with<std::mutex, std::vector<int> >()); 1066 #endif 1067 1068 static_assert(check_equality_comparable_with<std::map<int, void*>, 1069 std::map<int, void*> >()); 1070 static_assert( 1071 !check_equality_comparable_with<std::map<int, void*>, std::vector<int> >()); 1072 static_assert( 1073 check_equality_comparable_with<std::optional<std::vector<int> >, 1074 std::optional<std::vector<int> > >()); 1075 static_assert(check_equality_comparable_with<std::optional<std::vector<int> >, 1076 std::vector<int> >()); 1077 static_assert( 1078 check_equality_comparable_with<std::vector<int>, std::vector<int> >()); 1079 static_assert(!check_equality_comparable_with<std::vector<int>, int>()); 1080 } // namespace standard_types 1081 1082 namespace types_fit_for_purpose { 1083 static_assert( 1084 check_equality_comparable_with<cxx20_member_eq, cxx20_member_eq>()); 1085 static_assert( 1086 check_equality_comparable_with<cxx20_friend_eq, cxx20_friend_eq>()); 1087 static_assert( 1088 !check_equality_comparable_with<cxx20_member_eq, cxx20_friend_eq>()); 1089 1090 static_assert(check_equality_comparable_with<member_three_way_comparable, 1091 member_three_way_comparable>()); 1092 static_assert(check_equality_comparable_with<friend_three_way_comparable, 1093 friend_three_way_comparable>()); 1094 static_assert(!check_equality_comparable_with<member_three_way_comparable, 1095 friend_three_way_comparable>()); 1096 1097 static_assert( 1098 check_equality_comparable_with<explicit_operators, explicit_operators>()); 1099 static_assert(check_equality_comparable_with<equality_comparable_with_ec1, 1100 equality_comparable_with_ec1>()); 1101 static_assert(check_equality_comparable_with<different_return_types, 1102 different_return_types>()); 1103 static_assert(check_equality_comparable_with<explicit_operators, 1104 equality_comparable_with_ec1>()); 1105 static_assert(check_equality_comparable_with<explicit_operators, 1106 different_return_types>()); 1107 1108 static_assert(check_equality_comparable_with<one_way_eq, one_way_eq>()); 1109 static_assert( 1110 std::common_reference_with<one_way_eq const&, explicit_operators const&>); 1111 static_assert( 1112 !check_equality_comparable_with<one_way_eq, explicit_operators>()); 1113 1114 static_assert(check_equality_comparable_with<one_way_ne, one_way_ne>()); 1115 static_assert( 1116 std::common_reference_with<one_way_ne const&, explicit_operators const&>); 1117 static_assert( 1118 !check_equality_comparable_with<one_way_ne, explicit_operators>()); 1119 } // namespace types_fit_for_purpose 1120