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