1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // UNSUPPORTED: c++03, c++11, c++14, c++17 10 11 // template<class T> 12 // concept totally_ordered_with; 13 14 #include <concepts> 15 16 #include <array> 17 #include <cstddef> 18 #include <deque> 19 #include <forward_list> 20 #include <list> 21 #include <map> 22 #include <optional> 23 #include <vector> 24 25 #include "compare_types.h" 26 #include "test_macros.h" 27 28 template <class T, class U> 29 constexpr bool check_totally_ordered_with() noexcept { 30 constexpr bool result = std::totally_ordered_with<T, U>; 31 static_assert(std::totally_ordered_with<U, T> == result); 32 static_assert(std::totally_ordered_with<T, U const> == result); 33 static_assert(std::totally_ordered_with<T const, U const> == result); 34 static_assert(std::totally_ordered_with<T, U const&> == result); 35 static_assert(std::totally_ordered_with<T const, U const&> == result); 36 static_assert(std::totally_ordered_with<T&, U const> == result); 37 static_assert(std::totally_ordered_with<T const&, U const> == result); 38 static_assert(std::totally_ordered_with<T&, U const&> == result); 39 static_assert(std::totally_ordered_with<T const&, U const&> == result); 40 static_assert(std::totally_ordered_with<T, U const&&> == result); 41 static_assert(std::totally_ordered_with<T const, U const&&> == result); 42 static_assert(std::totally_ordered_with<T&, U const&&> == result); 43 static_assert(std::totally_ordered_with<T const&, U const&&> == result); 44 static_assert(std::totally_ordered_with<T&&, U const> == result); 45 static_assert(std::totally_ordered_with<T const&&, U const> == result); 46 static_assert(std::totally_ordered_with<T&&, U const&> == result); 47 static_assert(std::totally_ordered_with<T const&&, U const&> == result); 48 static_assert(std::totally_ordered_with<T&&, U const&&> == result); 49 static_assert(std::totally_ordered_with<T const&&, U const&&> == result); 50 return result; 51 } 52 53 namespace fundamentals { 54 static_assert(check_totally_ordered_with<int, int>()); 55 static_assert(check_totally_ordered_with<int, bool>()); 56 static_assert(check_totally_ordered_with<int, char>()); 57 static_assert(check_totally_ordered_with<int, wchar_t>()); 58 static_assert(check_totally_ordered_with<int, double>()); 59 static_assert(!check_totally_ordered_with<int, int*>()); 60 static_assert(!check_totally_ordered_with<int, int[5]>()); 61 static_assert(!check_totally_ordered_with<int, int (*)()>()); 62 static_assert(!check_totally_ordered_with<int, int (&)()>()); 63 64 struct S {}; 65 static_assert(!check_totally_ordered_with<int, int S::*>()); 66 static_assert(!check_totally_ordered_with<int, int (S::*)()>()); 67 static_assert(!check_totally_ordered_with<int, int (S::*)() noexcept>()); 68 static_assert(!check_totally_ordered_with<int, int (S::*)() const>()); 69 static_assert(!check_totally_ordered_with<int, int (S::*)() const noexcept>()); 70 static_assert(!check_totally_ordered_with<int, int (S::*)() volatile>()); 71 static_assert(!check_totally_ordered_with<int, int (S::*)() volatile noexcept>()); 72 static_assert(!check_totally_ordered_with<int, int (S::*)() const volatile>()); 73 static_assert(!check_totally_ordered_with<int, int (S::*)() const volatile noexcept>()); 74 static_assert(!check_totally_ordered_with<int, int (S::*)() &>()); 75 static_assert(!check_totally_ordered_with<int, int (S::*)() & noexcept>()); 76 static_assert(!check_totally_ordered_with<int, int (S::*)() const&>()); 77 static_assert(!check_totally_ordered_with<int, int (S::*)() const & noexcept>()); 78 static_assert(!check_totally_ordered_with<int, int (S::*)() volatile&>()); 79 static_assert(!check_totally_ordered_with<int, int (S::*)() volatile & noexcept>()); 80 static_assert(!check_totally_ordered_with<int, int (S::*)() const volatile&>()); 81 static_assert(!check_totally_ordered_with<int, int (S::*)() const volatile & noexcept>()); 82 static_assert(!check_totally_ordered_with<int, int (S::*)() &&>()); 83 static_assert(!check_totally_ordered_with < int, int (S::*)() && noexcept > ()); 84 static_assert(!check_totally_ordered_with<int, int (S::*)() const&&>()); 85 static_assert(!check_totally_ordered_with < int, int (S::*)() const&& noexcept > ()); 86 static_assert(!check_totally_ordered_with<int, int (S::*)() volatile&&>()); 87 static_assert(!check_totally_ordered_with < int, int (S::*)() volatile&& noexcept > ()); 88 static_assert(!check_totally_ordered_with<int, int (S::*)() const volatile&&>()); 89 static_assert(!check_totally_ordered_with < int, int (S::*)() const volatile&& noexcept > ()); 90 91 static_assert(check_totally_ordered_with<int*, int*>()); 92 static_assert(check_totally_ordered_with<int*, int[5]>()); 93 static_assert(!check_totally_ordered_with<int*, int (*)()>()); 94 static_assert(!check_totally_ordered_with<int*, int (&)()>()); 95 static_assert(!check_totally_ordered_with<int*, int (S::*)()>()); 96 static_assert(!check_totally_ordered_with<int*, int (S::*)() noexcept>()); 97 static_assert(!check_totally_ordered_with<int*, int (S::*)() const>()); 98 static_assert(!check_totally_ordered_with<int*, int (S::*)() const noexcept>()); 99 static_assert(!check_totally_ordered_with<int*, int (S::*)() volatile>()); 100 static_assert(!check_totally_ordered_with<int*, int (S::*)() volatile noexcept>()); 101 static_assert(!check_totally_ordered_with<int*, int (S::*)() const volatile>()); 102 static_assert(!check_totally_ordered_with<int*, int (S::*)() const volatile noexcept>()); 103 static_assert(!check_totally_ordered_with<int*, int (S::*)() &>()); 104 static_assert(!check_totally_ordered_with<int*, int (S::*)() & noexcept>()); 105 static_assert(!check_totally_ordered_with<int*, int (S::*)() const&>()); 106 static_assert(!check_totally_ordered_with<int*, int (S::*)() const & noexcept>()); 107 static_assert(!check_totally_ordered_with<int*, int (S::*)() volatile&>()); 108 static_assert(!check_totally_ordered_with<int*, int (S::*)() volatile & noexcept>()); 109 static_assert(!check_totally_ordered_with<int*, int (S::*)() const volatile&>()); 110 static_assert(!check_totally_ordered_with<int*, int (S::*)() const volatile & noexcept>()); 111 static_assert(!check_totally_ordered_with<int*, int (S::*)() &&>()); 112 static_assert(!check_totally_ordered_with < int*, int (S::*)() && noexcept > ()); 113 static_assert(!check_totally_ordered_with<int*, int (S::*)() const&&>()); 114 static_assert(!check_totally_ordered_with < int*, int (S::*)() const&& noexcept > ()); 115 static_assert(!check_totally_ordered_with<int*, int (S::*)() volatile&&>()); 116 static_assert(!check_totally_ordered_with < int*, int (S::*)() volatile&& noexcept > ()); 117 static_assert(!check_totally_ordered_with<int*, int (S::*)() const volatile&&>()); 118 static_assert(!check_totally_ordered_with < int*, int (S::*)() const volatile&& noexcept > ()); 119 120 static_assert(check_totally_ordered_with<int[5], int[5]>()); 121 static_assert(!check_totally_ordered_with<int[5], int (*)()>()); 122 static_assert(!check_totally_ordered_with<int[5], int (&)()>()); 123 static_assert(!check_totally_ordered_with<int[5], int (S::*)()>()); 124 static_assert(!check_totally_ordered_with<int[5], int (S::*)() noexcept>()); 125 static_assert(!check_totally_ordered_with<int[5], int (S::*)() const>()); 126 static_assert(!check_totally_ordered_with<int[5], int (S::*)() const noexcept>()); 127 static_assert(!check_totally_ordered_with<int[5], int (S::*)() volatile>()); 128 static_assert(!check_totally_ordered_with<int[5], int (S::*)() volatile noexcept>()); 129 static_assert(!check_totally_ordered_with<int[5], int (S::*)() const volatile>()); 130 static_assert(!check_totally_ordered_with< int[5], int (S::*)() const volatile noexcept>()); 131 static_assert(!check_totally_ordered_with<int[5], int (S::*)() &>()); 132 static_assert(!check_totally_ordered_with<int[5], int (S::*)() & noexcept>()); 133 static_assert(!check_totally_ordered_with<int[5], int (S::*)() const&>()); 134 static_assert(!check_totally_ordered_with<int[5], int (S::*)() const & noexcept>()); 135 static_assert(!check_totally_ordered_with<int[5], int (S::*)() volatile&>()); 136 static_assert(!check_totally_ordered_with<int[5], int (S::*)() volatile & noexcept>()); 137 static_assert(!check_totally_ordered_with<int[5], int (S::*)() const volatile&>()); 138 static_assert(!check_totally_ordered_with<int[5], int (S::*)() const volatile & noexcept>()); 139 static_assert(!check_totally_ordered_with<int[5], int (S::*)() &&>()); 140 static_assert(!check_totally_ordered_with < int[5], int (S::*)() && noexcept > ()); 141 static_assert(!check_totally_ordered_with<int[5], int (S::*)() const&&>()); 142 static_assert(!check_totally_ordered_with < int[5], int (S::*)() const&& noexcept > ()); 143 static_assert(!check_totally_ordered_with<int[5], int (S::*)() volatile&&>()); 144 static_assert(!check_totally_ordered_with < int[5], int (S::*)() volatile&& noexcept > ()); 145 static_assert(!check_totally_ordered_with<int[5], int (S::*)() const volatile&&>()); 146 static_assert(!check_totally_ordered_with < int[5], int (S::*)() const volatile&& noexcept > ()); 147 148 static_assert(check_totally_ordered_with<int (*)(), int (*)()>()); 149 static_assert(check_totally_ordered_with<int (*)(), int (&)()>()); 150 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)()>()); 151 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() noexcept>()); 152 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() const>()); 153 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() const noexcept>()); 154 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() volatile>()); 155 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() volatile noexcept>()); 156 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() const volatile>()); 157 static_assert(!check_totally_ordered_with< int (*)(), int (S::*)() const volatile noexcept>()); 158 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() &>()); 159 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() & noexcept>()); 160 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() const&>()); 161 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() const & noexcept>()); 162 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() volatile&>()); 163 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() volatile & noexcept>()); 164 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() const volatile&>()); 165 static_assert(!check_totally_ordered_with< int (*)(), int (S::*)() const volatile & noexcept>()); 166 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() &&>()); 167 static_assert(!check_totally_ordered_with < int (*)(), int (S::*)() && noexcept > ()); 168 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() const&&>()); 169 static_assert(!check_totally_ordered_with < int (*)(), int (S::*)() const&& noexcept > ()); 170 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() volatile&&>()); 171 static_assert(!check_totally_ordered_with < int (*)(), int (S::*)() volatile&& noexcept > ()); 172 static_assert(!check_totally_ordered_with<int (*)(), int (S::*)() const volatile&&>()); 173 static_assert(!check_totally_ordered_with < int (*)(), int (S::*)() const volatile&& noexcept > ()); 174 175 static_assert(check_totally_ordered_with<int (&)(), int (&)()>()); 176 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)()>()); 177 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() noexcept>()); 178 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() const>()); 179 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() const noexcept>()); 180 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() volatile>()); 181 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() volatile noexcept>()); 182 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() const volatile>()); 183 static_assert(!check_totally_ordered_with< int (&)(), int (S::*)() const volatile noexcept>()); 184 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() &>()); 185 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() & noexcept>()); 186 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() const&>()); 187 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() const & noexcept>()); 188 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() volatile&>()); 189 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() volatile & noexcept>()); 190 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() const volatile&>()); 191 static_assert(!check_totally_ordered_with< int (&)(), int (S::*)() const volatile & noexcept>()); 192 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() &&>()); 193 static_assert(!check_totally_ordered_with < int (&)(), int (S::*)() && noexcept > ()); 194 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() const&&>()); 195 static_assert(!check_totally_ordered_with < int (&)(), int (S::*)() const&& noexcept > ()); 196 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() volatile&&>()); 197 static_assert(!check_totally_ordered_with < int (&)(), int (S::*)() volatile&& noexcept > ()); 198 static_assert(!check_totally_ordered_with<int (&)(), int (S::*)() const volatile&&>()); 199 static_assert(!check_totally_ordered_with < int (&)(), int (S::*)() const volatile&& noexcept > ()); 200 201 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)()>()); 202 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() noexcept>()); 203 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() const>()); 204 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() const noexcept>()); 205 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() volatile>()); 206 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() volatile noexcept>()); 207 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() const volatile>()); 208 static_assert(!check_totally_ordered_with< int (S::*)(), int (S::*)() const volatile noexcept>()); 209 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() &>()); 210 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() & noexcept>()); 211 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() const&>()); 212 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() const & noexcept>()); 213 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() volatile&>()); 214 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() volatile & noexcept>()); 215 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() const volatile&>()); 216 static_assert(!check_totally_ordered_with< int (S::*)(), int (S::*)() const volatile & noexcept>()); 217 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() &&>()); 218 static_assert(!check_totally_ordered_with < int(S::*)(), int (S::*)() && noexcept > ()); 219 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() const&&>()); 220 static_assert(!check_totally_ordered_with < int(S::*)(), int (S::*)() const&& noexcept > ()); 221 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() volatile&&>()); 222 static_assert(!check_totally_ordered_with < int(S::*)(), int (S::*)() volatile&& noexcept > ()); 223 static_assert(!check_totally_ordered_with<int (S::*)(), int (S::*)() const volatile&&>()); 224 static_assert(!check_totally_ordered_with < int(S::*)(), int (S::*)() const volatile&& noexcept > ()); 225 226 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() noexcept>()); 227 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() const>()); 228 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() const noexcept>()); 229 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() volatile>()); 230 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() volatile noexcept>()); 231 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() const volatile>()); 232 static_assert(!check_totally_ordered_with< int (S::*)() noexcept, int (S::*)() const volatile noexcept>()); 233 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() &>()); 234 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() & noexcept>()); 235 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() const&>()); 236 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() const & noexcept>()); 237 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() volatile&>()); 238 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() volatile & noexcept>()); 239 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() const volatile&>()); 240 static_assert(!check_totally_ordered_with< int (S::*)() noexcept, int (S::*)() const volatile & noexcept>()); 241 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() &&>()); 242 static_assert(!check_totally_ordered_with < int(S::*)() noexcept, int (S::*)() && noexcept > ()); 243 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() const&&>()); 244 static_assert(!check_totally_ordered_with < int(S::*)() noexcept, int (S::*)() const&& noexcept > ()); 245 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() volatile&&>()); 246 static_assert(!check_totally_ordered_with < int(S::*)() noexcept, int (S::*)() volatile&& noexcept > ()); 247 static_assert(!check_totally_ordered_with<int (S::*)() noexcept, int (S::*)() const volatile&&>()); 248 static_assert(!check_totally_ordered_with < int(S::*)() noexcept, int (S::*)() const volatile&& noexcept > ()); 249 250 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() const>()); 251 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() const noexcept>()); 252 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() volatile>()); 253 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() volatile noexcept>()); 254 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() const volatile>()); 255 static_assert(!check_totally_ordered_with< int (S::*)() const, int (S::*)() const volatile noexcept>()); 256 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() &>()); 257 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() & noexcept>()); 258 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() const&>()); 259 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() const & noexcept>()); 260 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() volatile&>()); 261 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() volatile & noexcept>()); 262 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() const volatile&>()); 263 static_assert(!check_totally_ordered_with< int (S::*)() const, int (S::*)() const volatile & noexcept>()); 264 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() &&>()); 265 static_assert(!check_totally_ordered_with < int(S::*)() const, int (S::*)() && noexcept > ()); 266 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() const&&>()); 267 static_assert(!check_totally_ordered_with < int(S::*)() const, int (S::*)() const&& noexcept > ()); 268 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() volatile&&>()); 269 static_assert(!check_totally_ordered_with < int(S::*)() const, int (S::*)() volatile&& noexcept > ()); 270 static_assert(!check_totally_ordered_with<int (S::*)() const, int (S::*)() const volatile&&>()); 271 static_assert(!check_totally_ordered_with < int(S::*)() const, int (S::*)() const volatile&& noexcept > ()); 272 273 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() const noexcept>()); 274 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() volatile>()); 275 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() volatile noexcept>()); 276 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() const volatile>()); 277 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() const volatile noexcept>()); 278 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() &>()); 279 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() & noexcept>()); 280 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() const&>()); 281 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() const & noexcept>()); 282 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() volatile&>()); 283 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() volatile & noexcept>()); 284 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() const volatile&>()); 285 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() const volatile & noexcept>()); 286 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() &&>()); 287 static_assert(!check_totally_ordered_with < int(S::*)() const noexcept, int (S::*)() && noexcept > ()); 288 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() const&&>()); 289 static_assert(!check_totally_ordered_with < int(S::*)() const noexcept, int (S::*)() const&& noexcept > ()); 290 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() volatile&&>()); 291 static_assert(!check_totally_ordered_with < int(S::*)() const noexcept, int (S::*)() volatile&& noexcept > ()); 292 static_assert(!check_totally_ordered_with<int (S::*)() const noexcept, int (S::*)() const volatile&&>()); 293 static_assert(!check_totally_ordered_with < int(S::*)() const noexcept, int (S::*)() const volatile&& noexcept > ()); 294 295 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() volatile>()); 296 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() volatile noexcept>()); 297 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() const volatile>()); 298 static_assert(!check_totally_ordered_with< int (S::*)() volatile, int (S::*)() const volatile noexcept>()); 299 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() &>()); 300 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() & noexcept>()); 301 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() const&>()); 302 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() const & noexcept>()); 303 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() volatile&>()); 304 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() volatile & noexcept>()); 305 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() const volatile&>()); 306 static_assert(!check_totally_ordered_with< int (S::*)() volatile, int (S::*)() const volatile & noexcept>()); 307 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() &&>()); 308 static_assert(!check_totally_ordered_with < int(S::*)() volatile, int (S::*)() && noexcept > ()); 309 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() const&&>()); 310 static_assert(!check_totally_ordered_with < int(S::*)() volatile, int (S::*)() const&& noexcept > ()); 311 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() volatile&&>()); 312 static_assert(!check_totally_ordered_with < int(S::*)() volatile, int (S::*)() volatile&& noexcept > ()); 313 static_assert(!check_totally_ordered_with<int (S::*)() volatile, int (S::*)() const volatile&&>()); 314 static_assert(!check_totally_ordered_with < int(S::*)() volatile, int (S::*)() const volatile&& noexcept > ()); 315 316 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() volatile noexcept>()); 317 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() const volatile>()); 318 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() const volatile noexcept>()); 319 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() &>()); 320 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() & noexcept>()); 321 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() const&>()); 322 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() const & noexcept>()); 323 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() volatile&>()); 324 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() volatile & noexcept>()); 325 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() const volatile&>()); 326 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() const volatile & noexcept>()); 327 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() &&>()); 328 static_assert(!check_totally_ordered_with < int(S::*)() volatile noexcept, int (S::*)() && noexcept > ()); 329 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() const&&>()); 330 static_assert(!check_totally_ordered_with < int(S::*)() volatile noexcept, int (S::*)() const&& noexcept > ()); 331 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() volatile&&>()); 332 static_assert(!check_totally_ordered_with < int(S::*)() volatile noexcept, int (S::*)() volatile&& noexcept > ()); 333 static_assert(!check_totally_ordered_with<int (S::*)() volatile noexcept, int (S::*)() const volatile&&>()); 334 static_assert(!check_totally_ordered_with < int(S::*)() volatile noexcept, int (S::*)() const volatile&& noexcept > ()); 335 336 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() const volatile>()); 337 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() const volatile noexcept>()); 338 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() &>()); 339 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() & noexcept>()); 340 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() const&>()); 341 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() const & noexcept>()); 342 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() volatile&>()); 343 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() volatile & noexcept>()); 344 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() const volatile&>()); 345 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() const volatile & noexcept>()); 346 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() &&>()); 347 static_assert(!check_totally_ordered_with < int(S::*)() const volatile, int (S::*)() && noexcept > ()); 348 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() const&&>()); 349 static_assert(!check_totally_ordered_with < int(S::*)() const volatile, int (S::*)() const&& noexcept > ()); 350 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() volatile&&>()); 351 static_assert(!check_totally_ordered_with < int(S::*)() const volatile, int (S::*)() volatile&& noexcept > ()); 352 static_assert(!check_totally_ordered_with<int (S::*)() const volatile, int (S::*)() const volatile&&>()); 353 static_assert(!check_totally_ordered_with < int(S::*)() const volatile, int (S::*)() const volatile&& noexcept > ()); 354 355 static_assert( 356 !check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() const volatile noexcept>()); 357 static_assert(!check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() &>()); 358 static_assert(!check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() & noexcept>()); 359 static_assert(!check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() const&>()); 360 static_assert(!check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() const & noexcept>()); 361 static_assert(!check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() volatile&>()); 362 static_assert(!check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() volatile & noexcept>()); 363 static_assert(!check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() const volatile&>()); 364 static_assert( 365 !check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() const volatile & noexcept>()); 366 static_assert(!check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() &&>()); 367 static_assert(!check_totally_ordered_with < int(S::*)() const volatile noexcept, int (S::*)() && noexcept > ()); 368 static_assert(!check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() const&&>()); 369 static_assert(!check_totally_ordered_with < int(S::*)() const volatile noexcept, int (S::*)() const&& noexcept > ()); 370 static_assert(!check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() volatile&&>()); 371 static_assert(!check_totally_ordered_with < int(S::*)() const volatile noexcept, int (S::*)() volatile&& noexcept > ()); 372 static_assert(!check_totally_ordered_with<int (S::*)() const volatile noexcept, int (S::*)() const volatile&&>()); 373 static_assert(!check_totally_ordered_with < int(S::*)() const volatile noexcept, 374 int (S::*)() const volatile&& noexcept > ()); 375 376 static_assert(!check_totally_ordered_with<int (S::*)() &, int (S::*)() &>()); 377 static_assert(!check_totally_ordered_with<int (S::*)() &, int (S::*)() & noexcept>()); 378 static_assert(!check_totally_ordered_with<int (S::*)() &, int (S::*)() const&>()); 379 static_assert(!check_totally_ordered_with<int (S::*)() &, int (S::*)() const & noexcept>()); 380 static_assert(!check_totally_ordered_with<int (S::*)() &, int (S::*)() volatile&>()); 381 static_assert(!check_totally_ordered_with<int (S::*)() &, int (S::*)() volatile & noexcept>()); 382 static_assert(!check_totally_ordered_with<int (S::*)() &, int (S::*)() const volatile&>()); 383 static_assert(!check_totally_ordered_with< int (S::*)() &, int (S::*)() const volatile & noexcept>()); 384 static_assert(!check_totally_ordered_with<int (S::*)() &, int (S::*)() &&>()); 385 static_assert(!check_totally_ordered_with < int(S::*)() &, int (S::*)() && noexcept > ()); 386 static_assert(!check_totally_ordered_with<int (S::*)() &, int (S::*)() const&&>()); 387 static_assert(!check_totally_ordered_with < int(S::*)() &, int (S::*)() const&& noexcept > ()); 388 static_assert(!check_totally_ordered_with<int (S::*)() &, int (S::*)() volatile&&>()); 389 static_assert(!check_totally_ordered_with < int(S::*)() &, int (S::*)() volatile&& noexcept > ()); 390 static_assert(!check_totally_ordered_with<int (S::*)() &, int (S::*)() const volatile&&>()); 391 static_assert(!check_totally_ordered_with < int(S::*)() &, int (S::*)() const volatile&& noexcept > ()); 392 393 static_assert(!check_totally_ordered_with<int (S::*)() & noexcept, int (S::*)() & noexcept>()); 394 static_assert(!check_totally_ordered_with<int (S::*)() & noexcept, int (S::*)() const&>()); 395 static_assert(!check_totally_ordered_with<int (S::*)() & noexcept, int (S::*)() const & noexcept>()); 396 static_assert(!check_totally_ordered_with<int (S::*)() & noexcept, int (S::*)() volatile&>()); 397 static_assert(!check_totally_ordered_with<int (S::*)() & noexcept, int (S::*)() volatile & noexcept>()); 398 static_assert(!check_totally_ordered_with<int (S::*)() & noexcept, int (S::*)() const volatile&>()); 399 static_assert(!check_totally_ordered_with<int (S::*)() & noexcept, int (S::*)() const volatile & noexcept>()); 400 static_assert(!check_totally_ordered_with<int (S::*)() & noexcept, int (S::*)() &&>()); 401 static_assert(!check_totally_ordered_with < int(S::*)() & noexcept, int (S::*)() && noexcept > ()); 402 static_assert(!check_totally_ordered_with<int (S::*)() & noexcept, int (S::*)() const&&>()); 403 static_assert(!check_totally_ordered_with < int(S::*)() & noexcept, int (S::*)() const&& noexcept > ()); 404 static_assert(!check_totally_ordered_with<int (S::*)() & noexcept, int (S::*)() volatile&&>()); 405 static_assert(!check_totally_ordered_with < int(S::*)() & noexcept, int (S::*)() volatile&& noexcept > ()); 406 static_assert(!check_totally_ordered_with<int (S::*)() & noexcept, int (S::*)() const volatile&&>()); 407 static_assert(!check_totally_ordered_with < int(S::*)() & noexcept, int (S::*)() const volatile&& noexcept > ()); 408 409 static_assert(!check_totally_ordered_with<int (S::*)() const&, int (S::*)() const&>()); 410 static_assert(!check_totally_ordered_with<int (S::*)() const&, int (S::*)() const & noexcept>()); 411 static_assert(!check_totally_ordered_with<int (S::*)() const&, int (S::*)() volatile&>()); 412 static_assert(!check_totally_ordered_with<int (S::*)() const&, int (S::*)() volatile & noexcept>()); 413 static_assert(!check_totally_ordered_with<int (S::*)() const&, int (S::*)() const volatile&>()); 414 static_assert(!check_totally_ordered_with< int (S::*)() const&, int (S::*)() const volatile & noexcept>()); 415 static_assert(!check_totally_ordered_with<int (S::*)() const&, int (S::*)() &&>()); 416 static_assert(!check_totally_ordered_with < int(S::*)() const&, int (S::*)() && noexcept > ()); 417 static_assert(!check_totally_ordered_with<int (S::*)() const&, int (S::*)() const&&>()); 418 static_assert(!check_totally_ordered_with < int(S::*)() const&, int (S::*)() const&& noexcept > ()); 419 static_assert(!check_totally_ordered_with<int (S::*)() const&, int (S::*)() volatile&&>()); 420 static_assert(!check_totally_ordered_with < int(S::*)() const&, int (S::*)() volatile&& noexcept > ()); 421 static_assert(!check_totally_ordered_with<int (S::*)() const&, int (S::*)() const volatile&&>()); 422 static_assert(!check_totally_ordered_with < int(S::*)() const&, int (S::*)() const volatile&& noexcept > ()); 423 424 static_assert(!check_totally_ordered_with<int (S::*)() const & noexcept, int (S::*)() const & noexcept>()); 425 static_assert(!check_totally_ordered_with<int (S::*)() const & noexcept, int (S::*)() volatile&>()); 426 static_assert(!check_totally_ordered_with<int (S::*)() const & noexcept, int (S::*)() volatile & noexcept>()); 427 static_assert(!check_totally_ordered_with<int (S::*)() const & noexcept, int (S::*)() const volatile&>()); 428 static_assert(!check_totally_ordered_with<int (S::*)() const & noexcept, int (S::*)() const volatile & noexcept>()); 429 static_assert(!check_totally_ordered_with<int (S::*)() const & noexcept, int (S::*)() &&>()); 430 static_assert(!check_totally_ordered_with < int(S::*)() const& noexcept, int (S::*)() && noexcept > ()); 431 static_assert(!check_totally_ordered_with<int (S::*)() const & noexcept, int (S::*)() const&&>()); 432 static_assert(!check_totally_ordered_with < int(S::*)() const& noexcept, int (S::*)() const&& noexcept > ()); 433 static_assert(!check_totally_ordered_with<int (S::*)() const & noexcept, int (S::*)() volatile&&>()); 434 static_assert(!check_totally_ordered_with < int(S::*)() const& noexcept, int (S::*)() volatile&& noexcept > ()); 435 static_assert(!check_totally_ordered_with<int (S::*)() const & noexcept, int (S::*)() const volatile&&>()); 436 static_assert(!check_totally_ordered_with < int(S::*)() const& noexcept, int (S::*)() const volatile&& noexcept > ()); 437 438 static_assert(!check_totally_ordered_with<int (S::*)() volatile&, int (S::*)() volatile&>()); 439 static_assert(!check_totally_ordered_with<int (S::*)() volatile&, int (S::*)() volatile & noexcept>()); 440 static_assert(!check_totally_ordered_with<int (S::*)() volatile&, int (S::*)() const volatile&>()); 441 static_assert(!check_totally_ordered_with<int (S::*)() volatile&, int (S::*)() const volatile & noexcept>()); 442 static_assert(!check_totally_ordered_with<int (S::*)() volatile&, int (S::*)() &&>()); 443 static_assert(!check_totally_ordered_with < int(S::*)() volatile&, int (S::*)() && noexcept > ()); 444 static_assert(!check_totally_ordered_with<int (S::*)() volatile&, int (S::*)() const&&>()); 445 static_assert(!check_totally_ordered_with < int(S::*)() volatile&, int (S::*)() const&& noexcept > ()); 446 static_assert(!check_totally_ordered_with<int (S::*)() volatile&, int (S::*)() volatile&&>()); 447 static_assert(!check_totally_ordered_with < int(S::*)() volatile&, int (S::*)() volatile&& noexcept > ()); 448 static_assert(!check_totally_ordered_with<int (S::*)() volatile&, int (S::*)() const volatile&&>()); 449 static_assert(!check_totally_ordered_with < int(S::*)() volatile&, int (S::*)() const volatile&& noexcept > ()); 450 451 static_assert(!check_totally_ordered_with<int (S::*)() volatile & noexcept, int (S::*)() volatile & noexcept>()); 452 static_assert(!check_totally_ordered_with<int (S::*)() volatile & noexcept, int (S::*)() const volatile&>()); 453 static_assert(!check_totally_ordered_with<int (S::*)() volatile & noexcept, int (S::*)() const volatile & noexcept>()); 454 static_assert(!check_totally_ordered_with<int (S::*)() volatile & noexcept, int (S::*)() &&>()); 455 static_assert(!check_totally_ordered_with < int(S::*)() volatile & noexcept, int (S::*)() && noexcept > ()); 456 static_assert(!check_totally_ordered_with<int (S::*)() volatile & noexcept, int (S::*)() const&&>()); 457 static_assert(!check_totally_ordered_with < int(S::*)() volatile & noexcept, int (S::*)() const&& noexcept > ()); 458 static_assert(!check_totally_ordered_with<int (S::*)() volatile & noexcept, int (S::*)() volatile&&>()); 459 static_assert(!check_totally_ordered_with < int(S::*)() volatile & noexcept, int (S::*)() volatile&& noexcept > ()); 460 static_assert(!check_totally_ordered_with<int (S::*)() volatile & noexcept, int (S::*)() const volatile&&>()); 461 static_assert(!check_totally_ordered_with < int(S::*)() volatile & noexcept, 462 int (S::*)() const volatile&& noexcept > ()); 463 464 static_assert(!check_totally_ordered_with<int (S::*)() const volatile&, int (S::*)() const volatile&>()); 465 static_assert(!check_totally_ordered_with<int (S::*)() const volatile&, int (S::*)() const volatile & noexcept>()); 466 static_assert(!check_totally_ordered_with<int (S::*)() const volatile&, int (S::*)() &&>()); 467 static_assert(!check_totally_ordered_with < int(S::*)() const volatile&, int (S::*)() && noexcept > ()); 468 static_assert(!check_totally_ordered_with<int (S::*)() const volatile&, int (S::*)() const&&>()); 469 static_assert(!check_totally_ordered_with < int(S::*)() const volatile&, int (S::*)() const&& noexcept > ()); 470 static_assert(!check_totally_ordered_with<int (S::*)() const volatile&, int (S::*)() volatile&&>()); 471 static_assert(!check_totally_ordered_with < int(S::*)() const volatile&, int (S::*)() volatile&& noexcept > ()); 472 static_assert(!check_totally_ordered_with<int (S::*)() const volatile&, int (S::*)() const volatile&&>()); 473 static_assert(!check_totally_ordered_with < int(S::*)() const volatile&, int (S::*)() const volatile&& noexcept > ()); 474 475 static_assert( 476 !check_totally_ordered_with<int (S::*)() const volatile & noexcept, int (S::*)() const volatile & noexcept>()); 477 static_assert(!check_totally_ordered_with< int (S::*)() const volatile & noexcept, int (S::*)() &&>()); 478 static_assert(!check_totally_ordered_with < int(S::*)() const volatile& noexcept, int (S::*)() && noexcept > ()); 479 static_assert(!check_totally_ordered_with< int (S::*)() const volatile & noexcept, int (S::*)() const&&>()); 480 static_assert(!check_totally_ordered_with < int(S::*)() const volatile& noexcept, int (S::*)() const&& noexcept > ()); 481 static_assert(!check_totally_ordered_with<int (S::*)() const volatile & noexcept, int (S::*)() volatile&&>()); 482 static_assert(!check_totally_ordered_with < int(S::*)() const volatile& noexcept, 483 int (S::*)() volatile&& noexcept > ()); 484 static_assert(!check_totally_ordered_with<int (S::*)() const volatile & noexcept, int (S::*)() const volatile&&>()); 485 static_assert(!check_totally_ordered_with < int(S::*)() const volatile& noexcept, 486 int (S::*)() const volatile&& noexcept > ()); 487 488 static_assert(!check_totally_ordered_with<int (S::*)() &&, int (S::*)() &&>()); 489 static_assert(!check_totally_ordered_with < int(S::*)() &&, int (S::*)() && noexcept > ()); 490 static_assert(!check_totally_ordered_with<int (S::*)() &&, int (S::*)() const&&>()); 491 static_assert(!check_totally_ordered_with < int(S::*)() &&, int (S::*)() const&& noexcept > ()); 492 static_assert(!check_totally_ordered_with<int (S::*)() &&, int (S::*)() volatile&&>()); 493 static_assert(!check_totally_ordered_with < int(S::*)() &&, int (S::*)() volatile&& noexcept > ()); 494 static_assert(!check_totally_ordered_with<int (S::*)() &&, int (S::*)() const volatile&&>()); 495 static_assert(!check_totally_ordered_with < int(S::*)() &&, int (S::*)() const volatile&& noexcept > ()); 496 497 static_assert(!check_totally_ordered_with < int(S::*)() && noexcept, int (S::*)() && noexcept > ()); 498 static_assert(!check_totally_ordered_with < int(S::*)() && noexcept, int (S::*)() const&& > ()); 499 static_assert(!check_totally_ordered_with < int(S::*)() && noexcept, int (S::*)() const&& noexcept > ()); 500 static_assert(!check_totally_ordered_with < int(S::*)() && noexcept, int (S::*)() volatile&& > ()); 501 static_assert(!check_totally_ordered_with < int(S::*)() && noexcept, int (S::*)() volatile&& noexcept > ()); 502 static_assert(!check_totally_ordered_with < int(S::*)() && noexcept, int (S::*)() const volatile&& > ()); 503 static_assert(!check_totally_ordered_with < int(S::*)() && noexcept, int (S::*)() const volatile&& noexcept > ()); 504 505 static_assert(!check_totally_ordered_with<int (S::*)() const&&, int (S::*)() const&&>()); 506 static_assert(!check_totally_ordered_with < int(S::*)() const&&, int (S::*)() const&& noexcept > ()); 507 static_assert(!check_totally_ordered_with<int (S::*)() const&&, int (S::*)() volatile&&>()); 508 static_assert(!check_totally_ordered_with < int(S::*)() const&&, int (S::*)() volatile&& noexcept > ()); 509 static_assert(!check_totally_ordered_with<int (S::*)() const&&, int (S::*)() const volatile&&>()); 510 static_assert(!check_totally_ordered_with < int(S::*)() const&&, int (S::*)() const volatile&& noexcept > ()); 511 512 static_assert(!check_totally_ordered_with < int(S::*)() const&& noexcept, int (S::*)() const&& noexcept > ()); 513 static_assert(!check_totally_ordered_with < int(S::*)() const&& noexcept, int (S::*)() volatile&& > ()); 514 static_assert(!check_totally_ordered_with < int(S::*)() const&& noexcept, int (S::*)() volatile&& noexcept > ()); 515 static_assert(!check_totally_ordered_with < int(S::*)() const&& noexcept, int (S::*)() const volatile&& > ()); 516 static_assert(!check_totally_ordered_with < int(S::*)() const&& noexcept, int (S::*)() const volatile&& noexcept > ()); 517 518 static_assert(!check_totally_ordered_with<int (S::*)() volatile&&, int (S::*)() volatile&&>()); 519 static_assert(!check_totally_ordered_with < int(S::*)() volatile&&, int (S::*)() volatile&& noexcept > ()); 520 static_assert(!check_totally_ordered_with<int (S::*)() volatile&&, int (S::*)() const volatile&&>()); 521 static_assert(!check_totally_ordered_with < int(S::*)() volatile&&, int (S::*)() const volatile&& noexcept > ()); 522 523 static_assert(!check_totally_ordered_with < int(S::*)() volatile && noexcept, int (S::*)() volatile&& noexcept > ()); 524 static_assert(!check_totally_ordered_with < int(S::*)() volatile && noexcept, int (S::*)() const volatile&& > ()); 525 static_assert(!check_totally_ordered_with < int(S::*)() volatile && noexcept, 526 int (S::*)() const volatile&& noexcept > ()); 527 528 static_assert(!check_totally_ordered_with<int (S::*)() const volatile&&, int (S::*)() const volatile&&>()); 529 static_assert(!check_totally_ordered_with < int(S::*)() const volatile&&, int (S::*)() const volatile&& noexcept > ()); 530 static_assert(!check_totally_ordered_with < int(S::*)() const volatile&& noexcept, 531 int (S::*)() const volatile&& noexcept > ()); 532 533 #if !defined(TEST_COMPILER_GCC) 534 static_assert(!check_totally_ordered_with<std::nullptr_t, int>()); 535 536 static_assert(!check_totally_ordered_with<std::nullptr_t, int*>()); 537 static_assert(!check_totally_ordered_with<std::nullptr_t, int[]>()); 538 static_assert(!check_totally_ordered_with<std::nullptr_t, int[5]>()); 539 static_assert(!check_totally_ordered_with<std::nullptr_t, int (*)()>()); 540 static_assert(!check_totally_ordered_with<std::nullptr_t, int (&)()>()); 541 #endif 542 543 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)()>()); 544 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() noexcept>()); 545 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() const>()); 546 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() const noexcept>()); 547 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() volatile>()); 548 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() volatile noexcept>()); 549 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() const volatile>()); 550 static_assert(!check_totally_ordered_with< std::nullptr_t, int (S::*)() const volatile noexcept>()); 551 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() &>()); 552 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() & noexcept>()); 553 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() const&>()); 554 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() const & noexcept>()); 555 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() volatile&>()); 556 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() volatile & noexcept>()); 557 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() const volatile&>()); 558 static_assert(!check_totally_ordered_with< std::nullptr_t, int (S::*)() const volatile & noexcept>()); 559 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() &&>()); 560 static_assert(!check_totally_ordered_with < std::nullptr_t, int (S::*)() && noexcept > ()); 561 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() const&&>()); 562 static_assert(!check_totally_ordered_with < std::nullptr_t, int (S::*)() const&& noexcept > ()); 563 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() volatile&&>()); 564 static_assert(!check_totally_ordered_with < std::nullptr_t, int (S::*)() volatile&& noexcept > ()); 565 static_assert(!check_totally_ordered_with<std::nullptr_t, int (S::*)() const volatile&&>()); 566 static_assert(!check_totally_ordered_with < std::nullptr_t, int (S::*)() const volatile&& noexcept > ()); 567 568 static_assert(!std::equality_comparable_with<void, int>); 569 static_assert(!std::equality_comparable_with<void, int*>); 570 static_assert(!std::equality_comparable_with<void, std::nullptr_t>); 571 static_assert(!std::equality_comparable_with<void, int[5]>); 572 static_assert(!std::equality_comparable_with<void, int (*)()>); 573 static_assert(!std::equality_comparable_with<void, int (&)()>); 574 static_assert(!std::equality_comparable_with<void, int S::*>); 575 static_assert(!std::equality_comparable_with<void, int (S::*)()>); 576 static_assert(!std::equality_comparable_with<void, int (S::*)() noexcept>); 577 static_assert(!std::equality_comparable_with<void, int (S::*)() const>); 578 static_assert(!std::equality_comparable_with<void, int (S::*)() const noexcept>); 579 static_assert(!std::equality_comparable_with<void, int (S::*)() volatile>); 580 static_assert(!std::equality_comparable_with<void, int (S::*)() volatile noexcept>); 581 static_assert(!std::equality_comparable_with<void, int (S::*)() const volatile>); 582 static_assert(!std::equality_comparable_with<void, int (S::*)() const volatile noexcept>); 583 static_assert(!std::equality_comparable_with<void, int (S::*)() &>); 584 static_assert(!std::equality_comparable_with<void, int (S::*)() & noexcept>); 585 static_assert(!std::equality_comparable_with<void, int (S::*)() const&>); 586 static_assert(!std::equality_comparable_with<void, int (S::*)() const & noexcept>); 587 static_assert(!std::equality_comparable_with<void, int (S::*)() volatile&>); 588 static_assert(!std::equality_comparable_with<void, int (S::*)() volatile & noexcept>); 589 static_assert(!std::equality_comparable_with<void, int (S::*)() const volatile&>); 590 static_assert(!std::equality_comparable_with<void, int (S::*)() const volatile & noexcept>); 591 static_assert(!std::equality_comparable_with<void, int (S::*)() &&>); 592 static_assert(!std::equality_comparable_with < void, int (S::*)() && noexcept >); 593 static_assert(!std::equality_comparable_with<void, int (S::*)() const&&>); 594 static_assert(!std::equality_comparable_with < void, int (S::*)() const&& noexcept >); 595 static_assert(!std::equality_comparable_with<void, int (S::*)() volatile&&>); 596 static_assert(!std::equality_comparable_with < void, int (S::*)() volatile&& noexcept >); 597 static_assert(!std::equality_comparable_with<void, int (S::*)() const volatile&&>); 598 static_assert(!std::equality_comparable_with < void, int (S::*)() const volatile&& noexcept >); 599 } // namespace fundamentals 600 601 namespace standard_types { 602 static_assert(check_totally_ordered_with<std::array<int, 10>, std::array<int, 10> >()); 603 static_assert(!check_totally_ordered_with<std::array<int, 10>, std::array<double, 10> >()); 604 static_assert(check_totally_ordered_with<std::deque<int>, std::deque<int> >()); 605 static_assert(!check_totally_ordered_with<std::deque<int>, std::vector<int> >()); 606 static_assert(check_totally_ordered_with<std::forward_list<int>, std::forward_list<int> >()); 607 static_assert(!check_totally_ordered_with<std::forward_list<int>, std::vector<int> >()); 608 static_assert(check_totally_ordered_with<std::list<int>, std::list<int> >()); 609 static_assert(!check_totally_ordered_with<std::list<int>, std::vector<int> >()); 610 611 static_assert(check_totally_ordered_with<std::map<int, void*>, std::map<int, void*> >()); 612 static_assert(!check_totally_ordered_with<std::map<int, void*>, std::vector<int> >()); 613 static_assert(check_totally_ordered_with<std::optional<std::vector<int> >, std::optional<std::vector<int> > >()); 614 static_assert(check_totally_ordered_with<std::optional<std::vector<int> >, std::vector<int> >()); 615 static_assert(check_totally_ordered_with<std::vector<int>, std::vector<int> >()); 616 static_assert(!check_totally_ordered_with<std::vector<int>, int>()); 617 618 struct A {}; 619 static_assert(!check_totally_ordered_with<std::optional<std::vector<A> >, std::optional<std::vector<A> > >()); 620 static_assert(!check_totally_ordered_with<std::optional<std::vector<A> >, std::vector<A> >()); 621 struct B {}; 622 static_assert(!check_totally_ordered_with<std::vector<A>, std::vector<B> >()); 623 static_assert(!check_totally_ordered_with<std::optional<A>, std::optional<B> >()); 624 } // namespace standard_types 625 626 namespace types_fit_for_purpose { 627 static_assert(!check_totally_ordered_with<cxx20_member_eq, cxx20_member_eq>()); 628 static_assert(!check_totally_ordered_with<cxx20_friend_eq, cxx20_friend_eq>()); 629 static_assert(!check_totally_ordered_with<cxx20_member_eq, cxx20_friend_eq>()); 630 631 static_assert(check_totally_ordered_with<member_three_way_comparable, member_three_way_comparable>()); 632 static_assert(check_totally_ordered_with<friend_three_way_comparable, friend_three_way_comparable>()); 633 static_assert(!check_totally_ordered_with<member_three_way_comparable, friend_three_way_comparable>()); 634 635 static_assert(check_totally_ordered_with<explicit_operators, explicit_operators>()); 636 static_assert(!check_totally_ordered_with<equality_comparable_with_ec1, equality_comparable_with_ec1>()); 637 static_assert(check_totally_ordered_with<different_return_types, different_return_types>()); 638 static_assert(!check_totally_ordered_with<explicit_operators, equality_comparable_with_ec1>()); 639 static_assert(check_totally_ordered_with<explicit_operators, different_return_types>()); 640 641 static_assert(!check_totally_ordered_with<one_way_eq, one_way_eq>()); 642 static_assert(std::common_reference_with<one_way_eq const&, explicit_operators const&> && 643 !check_totally_ordered_with<one_way_eq, explicit_operators>()); 644 645 static_assert(!check_totally_ordered_with<one_way_ne, one_way_ne>()); 646 static_assert(std::common_reference_with<one_way_ne const&, explicit_operators const&> && 647 !check_totally_ordered_with<one_way_ne, explicit_operators>()); 648 649 static_assert(check_totally_ordered_with<totally_ordered_with_others, partial_ordering_totally_ordered_with>()); 650 static_assert(check_totally_ordered_with<totally_ordered_with_others, weak_ordering_totally_ordered_with>()); 651 static_assert(check_totally_ordered_with<totally_ordered_with_others, strong_ordering_totally_ordered_with>()); 652 653 static_assert(!check_totally_ordered_with<totally_ordered_with_others, eq_returns_explicit_bool>()); 654 static_assert(!check_totally_ordered_with<totally_ordered_with_others, ne_returns_explicit_bool>()); 655 static_assert(std::equality_comparable_with<totally_ordered_with_others, lt_returns_explicit_bool> && 656 !check_totally_ordered_with<totally_ordered_with_others, lt_returns_explicit_bool>()); 657 static_assert(std::equality_comparable_with<totally_ordered_with_others, gt_returns_explicit_bool> && 658 !check_totally_ordered_with<totally_ordered_with_others, gt_returns_explicit_bool>()); 659 static_assert(std::equality_comparable_with<totally_ordered_with_others, le_returns_explicit_bool> && 660 !check_totally_ordered_with<totally_ordered_with_others, le_returns_explicit_bool>()); 661 static_assert(std::equality_comparable_with<totally_ordered_with_others, ge_returns_explicit_bool> && 662 !check_totally_ordered_with<totally_ordered_with_others, ge_returns_explicit_bool>()); 663 static_assert(check_totally_ordered_with<totally_ordered_with_others, returns_true_type>()); 664 static_assert(check_totally_ordered_with<totally_ordered_with_others, returns_int_ptr>()); 665 666 static_assert(std::totally_ordered<no_lt_not_totally_ordered_with> && 667 std::equality_comparable_with<totally_ordered_with_others, no_lt_not_totally_ordered_with> && 668 !check_totally_ordered_with<totally_ordered_with_others, no_lt_not_totally_ordered_with>()); 669 static_assert(std::totally_ordered<no_gt_not_totally_ordered_with> && 670 std::equality_comparable_with<totally_ordered_with_others, no_gt_not_totally_ordered_with> && 671 !check_totally_ordered_with<totally_ordered_with_others, no_gt_not_totally_ordered_with>()); 672 static_assert(std::totally_ordered<no_le_not_totally_ordered_with> && 673 std::equality_comparable_with<totally_ordered_with_others, no_le_not_totally_ordered_with> && 674 !check_totally_ordered_with<totally_ordered_with_others, no_le_not_totally_ordered_with>()); 675 static_assert(std::totally_ordered<no_ge_not_totally_ordered_with> && 676 std::equality_comparable_with<totally_ordered_with_others, no_ge_not_totally_ordered_with> && 677 !check_totally_ordered_with<totally_ordered_with_others, no_ge_not_totally_ordered_with>()); 678 } // namespace types_fit_for_purpose 679