brintos

brintos / llvm-project-archived public Read only

0
0
Text · 64.8 KiB · 2f8d786 Raw
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