1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
//===----------------------------------------------------------------------===//
//
// 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
// UNSUPPORTED: libcpp-no-concepts
// <utility>
// template<class T, class U>
// constexpr bool cmp_equal(T t, U u) noexcept; // C++20
// template<class T, class U>
// constexpr bool cmp_not_equal(T t, U u) noexcept; // C++20
// template<class T, class U>
// constexpr bool cmp_less(T t, U u) noexcept; // C++20
// template<class T, class U>
// constexpr bool cmp_less_equal(T t, U u) noexcept; // C++20
// template<class T, class U>
// constexpr bool cmp_greater(T t, U u) noexcept; // C++20
// template<class T, class U>
// constexpr bool cmp_greater_equal(T t, U u) noexcept; // C++20
// template<class R, class T>
// constexpr bool in_range(T t) noexcept; // C++20
#include <utility>
#include "test_macros.h"
struct NonEmptyT {
int val;
NonEmptyT() : val(0) {}
NonEmptyT(int val) : val(val) {}
operator int&() { return val; }
operator int() const { return val; }
};
enum ColorT { red, green, blue };
struct EmptyT {};
template <class T>
constexpr void test() {
std::cmp_equal(T(), T()); // expected-error11{{no matching function for call to 'cmp_equal'}}
std::cmp_equal(T(), int()); // expected-error11{{no matching function for call to 'cmp_equal'}}
std::cmp_equal(int(), T()); // expected-error11{{no matching function for call to 'cmp_equal'}}
std::cmp_not_equal(T(), T()); // expected-error11{{no matching function for call to 'cmp_not_equal'}}
std::cmp_not_equal(T(), int()); // expected-error11{{no matching function for call to 'cmp_not_equal'}}
std::cmp_not_equal(int(), T()); // expected-error11{{no matching function for call to 'cmp_not_equal'}}
std::cmp_less(T(), T()); // expected-error11{{no matching function for call to 'cmp_less'}}
std::cmp_less(T(), int()); // expected-error11{{no matching function for call to 'cmp_less'}}
std::cmp_less(int(), T()); // expected-error11{{no matching function for call to 'cmp_less'}}
std::cmp_less_equal(T(), T()); // expected-error11{{no matching function for call to 'cmp_less_equal'}}
std::cmp_less_equal(T(), int()); // expected-error11{{no matching function for call to 'cmp_less_equal'}}
std::cmp_less_equal(int(), T()); // expected-error11{{no matching function for call to 'cmp_less_equal'}}
std::cmp_greater(T(), T()); // expected-error11{{no matching function for call to 'cmp_greater'}}
std::cmp_greater(T(), int()); // expected-error11{{no matching function for call to 'cmp_greater'}}
std::cmp_greater(int(), T()); // expected-error11{{no matching function for call to 'cmp_greater'}}
std::cmp_greater_equal(T(), T()); // expected-error11{{no matching function for call to 'cmp_greater_equal'}}
std::cmp_greater_equal(T(), int()); // expected-error11{{no matching function for call to 'cmp_greater_equal'}}
std::cmp_greater_equal(int(), T()); // expected-error11{{no matching function for call to 'cmp_greater_equal'}}
std::in_range<T>(int()); // expected-error11{{no matching function for call to 'in_range'}}
std::in_range<int>(T()); // expected-error11{{no matching function for call to 'in_range'}}
}
#ifndef _LIBCPP_HAS_NO_CHAR8_T
template <class T>
constexpr void test_char8t() {
std::cmp_equal(T(), T()); // expected-error1{{no matching function for call to 'cmp_equal'}}
std::cmp_equal(T(), int()); // expected-error1{{no matching function for call to 'cmp_equal'}}
std::cmp_equal(int(), T()); // expected-error1{{no matching function for call to 'cmp_equal'}}
std::cmp_not_equal(T(), T()); // expected-error1{{no matching function for call to 'cmp_not_equal'}}
std::cmp_not_equal(T(), int()); // expected-error1{{no matching function for call to 'cmp_not_equal'}}
std::cmp_not_equal(int(), T()); // expected-error1{{no matching function for call to 'cmp_not_equal'}}
std::cmp_less(T(), T()); // expected-error1{{no matching function for call to 'cmp_less'}}
std::cmp_less(T(), int()); // expected-error1{{no matching function for call to 'cmp_less'}}
std::cmp_less(int(), T()); // expected-error1{{no matching function for call to 'cmp_less'}}
std::cmp_less_equal(T(), T()); // expected-error1{{no matching function for call to 'cmp_less_equal'}}
std::cmp_less_equal(T(), int()); // expected-error1{{no matching function for call to 'cmp_less_equal'}}
std::cmp_less_equal(int(), T()); // expected-error1{{no matching function for call to 'cmp_less_equal'}}
std::cmp_greater(T(), T()); // expected-error1{{no matching function for call to 'cmp_greater'}}
std::cmp_greater(T(), int()); // expected-error1{{no matching function for call to 'cmp_greater'}}
std::cmp_greater(int(), T()); // expected-error1{{no matching function for call to 'cmp_greater'}}
std::cmp_greater_equal(T(), T()); // expected-error1{{no matching function for call to 'cmp_greater_equal'}}
std::cmp_greater_equal(T(), int()); // expected-error1{{no matching function for call to 'cmp_greater_equal'}}
std::cmp_greater_equal(int(), T()); // expected-error1{{no matching function for call to 'cmp_greater_equal'}}
std::in_range<T>(int()); // expected-error1{{no matching function for call to 'in_range'}}
std::in_range<int>(T()); // expected-error1{{no matching function for call to 'in_range'}}
}
#endif // _LIBCPP_HAS_NO_CHAR8_T
#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
template <class T>
constexpr void test_uchars() {
std::cmp_equal(T(), T()); // expected-error2{{no matching function for call to 'cmp_equal'}}
std::cmp_equal(T(), int()); // expected-error2{{no matching function for call to 'cmp_equal'}}
std::cmp_equal(int(), T()); // expected-error2{{no matching function for call to 'cmp_equal'}}
std::cmp_not_equal(T(), T()); // expected-error2{{no matching function for call to 'cmp_not_equal'}}
std::cmp_not_equal(T(), int()); // expected-error2{{no matching function for call to 'cmp_not_equal'}}
std::cmp_not_equal(int(), T()); // expected-error2{{no matching function for call to 'cmp_not_equal'}}
std::cmp_less(T(), T()); // expected-error2{{no matching function for call to 'cmp_less'}}
std::cmp_less(T(), int()); // expected-error2{{no matching function for call to 'cmp_less'}}
std::cmp_less(int(), T()); // expected-error2{{no matching function for call to 'cmp_less'}}
std::cmp_less_equal(T(), T()); // expected-error2{{no matching function for call to 'cmp_less_equal'}}
std::cmp_less_equal(T(), int()); // expected-error2{{no matching function for call to 'cmp_less_equal'}}
std::cmp_less_equal(int(), T()); // expected-error2{{no matching function for call to 'cmp_less_equal'}}
std::cmp_greater(T(), T()); // expected-error2{{no matching function for call to 'cmp_greater'}}
std::cmp_greater(T(), int()); // expected-error2{{no matching function for call to 'cmp_greater'}}
std::cmp_greater(int(), T()); // expected-error2{{no matching function for call to 'cmp_greater'}}
std::cmp_greater_equal(T(), T()); // expected-error2{{no matching function for call to 'cmp_greater_equal'}}
std::cmp_greater_equal(T(), int()); // expected-error2{{no matching function for call to 'cmp_greater_equal'}}
std::cmp_greater_equal(int(), T()); // expected-error2{{no matching function for call to 'cmp_greater_equal'}}
std::in_range<T>(int()); // expected-error2{{no matching function for call to 'in_range'}}
std::in_range<int>(T()); // expected-error2{{no matching function for call to 'in_range'}}
}
#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
int main() {
test<bool>();
test<char>();
test<wchar_t>();
test<float>();
test<double>();
test<long double>();
test<std::byte>();
test<NonEmptyT>();
test<ColorT>();
test<nullptr_t>();
test<EmptyT>();
#ifndef _LIBCPP_HAS_NO_CHAR8_T
test_char8t<char8_t>();
#endif // _LIBCPP_HAS_NO_CHAR8_T
#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
test_uchars<char16_t>();
test_uchars<char32_t>();
#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
return 0;
}
|