[lld][WebAssembly] Introduce Ctx::arg
[llvm-project.git] / libcxx / test / std / concepts / concepts.compare / concepts.totallyordered / totally_ordered_with.compile.pass.cpp
blobdffc33265aebfd1e79f177843338ebc53bd05395
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 //===----------------------------------------------------------------------===//
9 // UNSUPPORTED: c++03, c++11, c++14, c++17
11 // template<class T>
12 // concept totally_ordered_with;
14 #include <concepts>
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>
25 #include "compare_types.h"
26 #include "test_macros.h"
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;
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 (&)()>());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
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 > ());
533 #if !defined(TEST_COMPILER_GCC)
534 static_assert(!check_totally_ordered_with<std::nullptr_t, int>());
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
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 > ());
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
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> >());
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>());
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
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>());
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>());
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>());
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>());
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>());
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>());
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>());
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