//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14, c++17 // template // concept equality_comparable_with = // see below #include #include #include #include #include #include #include #include #include #include "test_macros.h" #ifndef TEST_HAS_NO_THREADS # include #endif #include "compare_types.h" template constexpr bool check_equality_comparable_with() { constexpr bool result = std::equality_comparable_with; static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); static_assert(std::equality_comparable_with == result); return result; } namespace fundamentals { static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); struct S {}; static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int, int (S::*)() const volatile noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int, int (S::*)() volatile&& noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int*, int (S::*)() const volatile noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int*, int (S::*)() const volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int*, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int*, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int*, int (S::*)() volatile&& noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int*, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int[5], int (S::*)() const volatile noexcept>()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int[5], int (S::*)() const volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int[5], int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int[5], int (S::*)() const&& noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int[5], int (S::*)() volatile&& noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int[5], int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (*)(), int (S::*)() volatile noexcept>()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (*)(), int (S::*)() const volatile noexcept>()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (*)(), int (S::*)() const volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (*)(), int (S::*)() && noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (*)(), int (S::*)() const&& noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (*)(), int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (*)(), int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (&)(), int (S::*)() volatile noexcept>()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (&)(), int (S::*)() const volatile noexcept>()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (&)(), int (S::*)() const volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (&)(), int (S::*)() && noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (&)(), int (S::*)() const&& noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (&)(), int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (&)(), int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)(), int (S::*)() volatile noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)(), int (S::*)() const volatile noexcept>()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)(), int (S::*)() volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)(), int (S::*)() const volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)(), int (S::*)() && noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)(), int (S::*)() const&& noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)(), int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)(), int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() noexcept, int (S::*)() volatile noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() noexcept, int (S::*)() const volatile noexcept>()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() noexcept, int (S::*)() volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() noexcept, int (S::*)() const volatile & noexcept>()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() noexcept, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() noexcept, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() noexcept, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() noexcept, int (S::*)() const volatile&& noexcept > ()); static_assert( check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const, int (S::*)() volatile noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const, int (S::*)() const volatile noexcept>()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const, int (S::*)() volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const, int (S::*)() const volatile & noexcept>()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const noexcept, int (S::*)() volatile noexcept>()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const noexcept, int (S::*)() volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const noexcept, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const noexcept, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const noexcept, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const noexcept, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() volatile, int (S::*)() const volatile noexcept>()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() volatile, int (S::*)() volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() volatile, int (S::*)() const volatile & noexcept>()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const volatile, int (S::*)() volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile, int (S::*)() const volatile&& noexcept > ()); static_assert( check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const volatile noexcept, int (S::*)() &>()); static_assert(!check_equality_comparable_with< int (S::*)() const volatile noexcept, int (S::*)() & noexcept>()); static_assert(!check_equality_comparable_with< int (S::*)() const volatile noexcept, int (S::*)() const&>()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const volatile noexcept, int (S::*)() volatile&>()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const volatile noexcept, int (S::*)() &&>()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile noexcept, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with< int (S::*)() const volatile noexcept, int (S::*)() const&&>()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile noexcept, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with< int (S::*)() const volatile noexcept, int (S::*)() volatile&&>()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile noexcept, int (S::*)() volatile&& noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile noexcept, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() &, int (S::*)() volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() &, int (S::*)() const volatile & noexcept>()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() &, int (S::*)() && noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() &, int (S::*)() const&& noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() &, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() &, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() & noexcept, int (S::*)() volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() & noexcept, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() & noexcept, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() & noexcept, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() & noexcept, int (S::*)() const volatile&& noexcept > ()); static_assert( check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const&, int (S::*)() volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const&, int (S::*)() const volatile & noexcept>()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const&, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const&, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const&, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const&, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with< int (S::*)() volatile&, int (S::*)() volatile & noexcept>()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile&, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile&, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile&, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile&, int (S::*)() const volatile&& noexcept > ()); static_assert( check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile&, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile&, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile&, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile&, int (S::*)() const volatile&& noexcept > ()); static_assert( check_equality_comparable_with()); static_assert(!check_equality_comparable_with< int (S::*)() const volatile & noexcept, int (S::*)() &&>()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile& noexcept, int (S::*)() && noexcept > ()); static_assert(!check_equality_comparable_with< int (S::*)() const volatile & noexcept, int (S::*)() const&&>()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile& noexcept, int (S::*)() const&& noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile& noexcept, int (S::*)() volatile&& noexcept > ()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const volatile& noexcept, int (S::*)() const volatile&& noexcept > ()); static_assert( check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() &&, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() &&, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() &&, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, int (S::*)() const&& > ()); static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, int (S::*)() const&& noexcept > ()); static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, int (S::*)() volatile&& > ()); static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, int (S::*)() const volatile&& > ()); static_assert(!check_equality_comparable_with < int (S::*)() && noexcept, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const&&, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const&&, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept, int (S::*)() volatile&& > ()); static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept, int (S::*)() volatile&& noexcept > ()); static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept, int (S::*)() const volatile&& > ()); static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with< int (S::*)() volatile&&, int (S::*)() volatile && noexcept>()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile&&, int (S::*)() const volatile&& noexcept > ()); static_assert( check_equality_comparable_with()); static_assert(!check_equality_comparable_with < int (S::*)() volatile&& noexcept, int (S::*)() const volatile&& > ()); static_assert(!check_equality_comparable_with < int (S::*)() volatile&& noexcept, int (S::*)() const volatile&& noexcept > ()); static_assert(check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with< std::nullptr_t, int (S::*)() const volatile noexcept>()); static_assert(check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert(check_equality_comparable_with< std::nullptr_t, int (S::*)() volatile & noexcept>()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with< std::nullptr_t, int (S::*)() const volatile & noexcept>()); static_assert( check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert(check_equality_comparable_with< std::nullptr_t, int (S::*)() volatile && noexcept>()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with< std::nullptr_t, int (S::*)() const volatile && noexcept>()); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert( !std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert( !std::equality_comparable_with); static_assert( !std::equality_comparable_with); static_assert( !std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert( !std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert( !std::equality_comparable_with); static_assert( !std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with < void, int (S::*)() && noexcept >); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with < void, int (S::*)() const&& noexcept >); static_assert(!std::equality_comparable_with); static_assert(!std::equality_comparable_with < void, int (S::*)() volatile&& noexcept >); static_assert( !std::equality_comparable_with); static_assert(!std::equality_comparable_with < void, int (S::*)() const volatile&& noexcept >); } // namespace fundamentals namespace standard_types { static_assert(check_equality_comparable_with, std::array >()); static_assert(!check_equality_comparable_with, std::array >()); static_assert( check_equality_comparable_with, std::deque >()); static_assert( !check_equality_comparable_with, std::vector >()); static_assert(check_equality_comparable_with, std::forward_list >()); static_assert(!check_equality_comparable_with, std::vector >()); static_assert( check_equality_comparable_with, std::list >()); static_assert( !check_equality_comparable_with, std::vector >()); #ifndef TEST_HAS_NO_THREADS static_assert(!check_equality_comparable_with, std::lock_guard >()); static_assert(!check_equality_comparable_with, std::vector >()); static_assert(!check_equality_comparable_with()); static_assert(!check_equality_comparable_with >()); #endif static_assert(check_equality_comparable_with, std::map >()); static_assert( !check_equality_comparable_with, std::vector >()); static_assert( check_equality_comparable_with >, std::optional > >()); static_assert(check_equality_comparable_with >, std::vector >()); static_assert( check_equality_comparable_with, std::vector >()); static_assert(!check_equality_comparable_with, int>()); } // namespace standard_types namespace types_fit_for_purpose { static_assert( check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert( !check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(!check_equality_comparable_with()); static_assert( check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert( std::common_reference_with); static_assert( !check_equality_comparable_with()); static_assert(check_equality_comparable_with()); static_assert( std::common_reference_with); static_assert( !check_equality_comparable_with()); } // namespace types_fit_for_purpose