Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / libcxx / test / std / concepts / concepts.compare / concept.equalitycomparable / equality_comparable_with.compile.pass.cpp
blobe0edd1f332f811d10727762ec1ab3f6cc443ed19
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, class U>
12 // concept equality_comparable_with = // see below
14 #include <concepts>
16 #include <array>
17 #include <deque>
18 #include <forward_list>
19 #include <list>
20 #include <map>
21 #include <memory>
22 #include <optional>
23 #include <set>
24 #include <unordered_map>
25 #include <unordered_set>
26 #include <vector>
28 #include "test_macros.h"
30 #ifndef TEST_HAS_NO_THREADS
31 # include <mutex>
32 #endif
34 #include "compare_types.h"
36 template <class T, class U>
37 constexpr bool check_equality_comparable_with() {
38 constexpr bool result = std::equality_comparable_with<T, U>;
39 static_assert(std::equality_comparable_with<U, T> == result);
40 static_assert(std::equality_comparable_with<T, U const> == result);
41 static_assert(std::equality_comparable_with<T const, U const> == result);
42 static_assert(std::equality_comparable_with<T, U const&> == result);
43 static_assert(std::equality_comparable_with<T const, U const&> == result);
44 static_assert(std::equality_comparable_with<T&, U const> == result);
45 static_assert(std::equality_comparable_with<T const&, U const> == result);
46 static_assert(std::equality_comparable_with<T&, U const&> == result);
47 static_assert(std::equality_comparable_with<T const&, U const&> == result);
48 static_assert(std::equality_comparable_with<T, U const&&> == result);
49 static_assert(std::equality_comparable_with<T const, U const&&> == result);
50 static_assert(std::equality_comparable_with<T&, U const&&> == result);
51 static_assert(std::equality_comparable_with<T const&, U const&&> == result);
52 static_assert(std::equality_comparable_with<T&&, U const> == result);
53 static_assert(std::equality_comparable_with<T const&&, U const> == result);
54 static_assert(std::equality_comparable_with<T&&, U const&> == result);
55 static_assert(std::equality_comparable_with<T const&&, U const&> == result);
56 static_assert(std::equality_comparable_with<T&&, U const&&> == result);
57 static_assert(std::equality_comparable_with<T const&&, U const&&> == result);
58 return result;
61 namespace fundamentals {
62 static_assert(check_equality_comparable_with<int, int>());
63 static_assert(check_equality_comparable_with<int, bool>());
64 static_assert(check_equality_comparable_with<int, char>());
65 static_assert(check_equality_comparable_with<int, wchar_t>());
66 static_assert(check_equality_comparable_with<int, double>());
67 static_assert(!check_equality_comparable_with<int, int*>());
68 static_assert(!check_equality_comparable_with<int, int[5]>());
69 static_assert(!check_equality_comparable_with<int, int (*)()>());
70 static_assert(!check_equality_comparable_with<int, int (&)()>());
72 struct S {};
73 static_assert(!check_equality_comparable_with<int, int S::*>());
74 static_assert(!check_equality_comparable_with<int, int (S::*)()>());
75 static_assert(!check_equality_comparable_with<int, int (S::*)() noexcept>());
76 static_assert(!check_equality_comparable_with<int, int (S::*)() const>());
77 static_assert(
78 !check_equality_comparable_with<int, int (S::*)() const noexcept>());
79 static_assert(!check_equality_comparable_with<int, int (S::*)() volatile>());
80 static_assert(
81 !check_equality_comparable_with<int, int (S::*)() volatile noexcept>());
82 static_assert(
83 !check_equality_comparable_with<int, int (S::*)() const volatile>());
84 static_assert(!check_equality_comparable_with<
85 int, int (S::*)() const volatile noexcept>());
86 static_assert(!check_equality_comparable_with<int, int (S::*)() &>());
87 static_assert(!check_equality_comparable_with<int, int (S::*)() & noexcept>());
88 static_assert(!check_equality_comparable_with<int, int (S::*)() const&>());
89 static_assert(
90 !check_equality_comparable_with<int, int (S::*)() const & noexcept>());
91 static_assert(!check_equality_comparable_with<int, int (S::*)() volatile&>());
92 static_assert(
93 !check_equality_comparable_with<int, int (S::*)() volatile & noexcept>());
94 static_assert(
95 !check_equality_comparable_with<int, int (S::*)() const volatile&>());
96 static_assert(!check_equality_comparable_with<int, int (S::*)() const volatile &
97 noexcept>());
98 static_assert(!check_equality_comparable_with<int, int (S::*)() &&>());
99 static_assert(!check_equality_comparable_with < int,
100 int (S::*)() && noexcept > ());
101 static_assert(!check_equality_comparable_with<int, int (S::*)() const&&>());
102 static_assert(!check_equality_comparable_with < int,
103 int (S::*)() const&& noexcept > ());
104 static_assert(!check_equality_comparable_with<int, int (S::*)() volatile&&>());
105 static_assert(!check_equality_comparable_with < int,
106 int (S::*)() volatile&& noexcept > ());
107 static_assert(
108 !check_equality_comparable_with<int, int (S::*)() const volatile&&>());
109 static_assert(!check_equality_comparable_with < int,
110 int (S::*)() const volatile&& noexcept > ());
112 static_assert(check_equality_comparable_with<int*, int*>());
113 static_assert(check_equality_comparable_with<int*, int[5]>());
114 static_assert(!check_equality_comparable_with<int*, int (*)()>());
115 static_assert(!check_equality_comparable_with<int*, int (&)()>());
116 static_assert(!check_equality_comparable_with<int*, int (S::*)()>());
117 static_assert(!check_equality_comparable_with<int*, int (S::*)() noexcept>());
118 static_assert(!check_equality_comparable_with<int*, int (S::*)() const>());
119 static_assert(
120 !check_equality_comparable_with<int*, int (S::*)() const noexcept>());
121 static_assert(!check_equality_comparable_with<int*, int (S::*)() volatile>());
122 static_assert(
123 !check_equality_comparable_with<int*, int (S::*)() volatile noexcept>());
124 static_assert(
125 !check_equality_comparable_with<int*, int (S::*)() const volatile>());
126 static_assert(!check_equality_comparable_with<
127 int*, int (S::*)() const volatile noexcept>());
128 static_assert(!check_equality_comparable_with<int*, int (S::*)() &>());
129 static_assert(!check_equality_comparable_with<int*, int (S::*)() & noexcept>());
130 static_assert(!check_equality_comparable_with<int*, int (S::*)() const&>());
131 static_assert(
132 !check_equality_comparable_with<int*, int (S::*)() const & noexcept>());
133 static_assert(!check_equality_comparable_with<int*, int (S::*)() volatile&>());
134 static_assert(
135 !check_equality_comparable_with<int*, int (S::*)() volatile & noexcept>());
136 static_assert(
137 !check_equality_comparable_with<int*, int (S::*)() const volatile&>());
138 static_assert(!check_equality_comparable_with<
139 int*, int (S::*)() const volatile & noexcept>());
140 static_assert(!check_equality_comparable_with<int*, int (S::*)() &&>());
141 static_assert(!check_equality_comparable_with < int*,
142 int (S::*)() && noexcept > ());
143 static_assert(!check_equality_comparable_with<int*, int (S::*)() const&&>());
144 static_assert(!check_equality_comparable_with < int*,
145 int (S::*)() const&& noexcept > ());
146 static_assert(!check_equality_comparable_with<int*, int (S::*)() volatile&&>());
147 static_assert(!check_equality_comparable_with < int*,
148 int (S::*)() volatile&& noexcept > ());
149 static_assert(
150 !check_equality_comparable_with<int*, int (S::*)() const volatile&&>());
151 static_assert(!check_equality_comparable_with < int*,
152 int (S::*)() const volatile&& noexcept > ());
154 static_assert(check_equality_comparable_with<int[5], int[5]>());
155 static_assert(!check_equality_comparable_with<int[5], int (*)()>());
156 static_assert(!check_equality_comparable_with<int[5], int (&)()>());
157 static_assert(!check_equality_comparable_with<int[5], int (S::*)()>());
158 static_assert(!check_equality_comparable_with<int[5], int (S::*)() noexcept>());
159 static_assert(!check_equality_comparable_with<int[5], int (S::*)() const>());
160 static_assert(
161 !check_equality_comparable_with<int[5], int (S::*)() const noexcept>());
162 static_assert(!check_equality_comparable_with<int[5], int (S::*)() volatile>());
163 static_assert(
164 !check_equality_comparable_with<int[5], int (S::*)() volatile noexcept>());
165 static_assert(
166 !check_equality_comparable_with<int[5], int (S::*)() const volatile>());
167 static_assert(!check_equality_comparable_with<
168 int[5], int (S::*)() const volatile noexcept>());
169 static_assert(!check_equality_comparable_with<int[5], int (S::*)() &>());
170 static_assert(
171 !check_equality_comparable_with<int[5], int (S::*)() & noexcept>());
172 static_assert(!check_equality_comparable_with<int[5], int (S::*)() const&>());
173 static_assert(
174 !check_equality_comparable_with<int[5], int (S::*)() const & noexcept>());
175 static_assert(
176 !check_equality_comparable_with<int[5], int (S::*)() volatile&>());
177 static_assert(!check_equality_comparable_with<int[5], int (S::*)() volatile &
178 noexcept>());
179 static_assert(
180 !check_equality_comparable_with<int[5], int (S::*)() const volatile&>());
181 static_assert(!check_equality_comparable_with<
182 int[5], int (S::*)() const volatile & noexcept>());
183 static_assert(!check_equality_comparable_with<int[5], int (S::*)() &&>());
184 static_assert(!check_equality_comparable_with < int[5],
185 int (S::*)() && noexcept > ());
186 static_assert(!check_equality_comparable_with<int[5], int (S::*)() const&&>());
187 static_assert(!check_equality_comparable_with < int[5],
188 int (S::*)() const&& noexcept > ());
189 static_assert(
190 !check_equality_comparable_with<int[5], int (S::*)() volatile&&>());
191 static_assert(!check_equality_comparable_with < int[5],
192 int (S::*)() volatile&& noexcept > ());
193 static_assert(
194 !check_equality_comparable_with<int[5], int (S::*)() const volatile&&>());
195 static_assert(!check_equality_comparable_with < int[5],
196 int (S::*)() const volatile&& noexcept > ());
198 static_assert(check_equality_comparable_with<int (*)(), int (*)()>());
199 static_assert(check_equality_comparable_with<int (*)(), int (&)()>());
200 static_assert(!check_equality_comparable_with<int (*)(), int (S::*)()>());
201 static_assert(
202 !check_equality_comparable_with<int (*)(), int (S::*)() noexcept>());
203 static_assert(!check_equality_comparable_with<int (*)(), int (S::*)() const>());
204 static_assert(
205 !check_equality_comparable_with<int (*)(), int (S::*)() const noexcept>());
206 static_assert(
207 !check_equality_comparable_with<int (*)(), int (S::*)() volatile>());
208 static_assert(!check_equality_comparable_with<
209 int (*)(), int (S::*)() volatile noexcept>());
210 static_assert(
211 !check_equality_comparable_with<int (*)(), int (S::*)() const volatile>());
212 static_assert(!check_equality_comparable_with<
213 int (*)(), int (S::*)() const volatile noexcept>());
214 static_assert(!check_equality_comparable_with<int (*)(), int (S::*)() &>());
215 static_assert(
216 !check_equality_comparable_with<int (*)(), int (S::*)() & noexcept>());
217 static_assert(
218 !check_equality_comparable_with<int (*)(), int (S::*)() const&>());
219 static_assert(!check_equality_comparable_with<int (*)(),
220 int (S::*)() const & noexcept>());
221 static_assert(
222 !check_equality_comparable_with<int (*)(), int (S::*)() volatile&>());
223 static_assert(!check_equality_comparable_with<int (*)(), int (S::*)() volatile &
224 noexcept>());
225 static_assert(
226 !check_equality_comparable_with<int (*)(), int (S::*)() const volatile&>());
227 static_assert(!check_equality_comparable_with<
228 int (*)(), int (S::*)() const volatile & noexcept>());
229 static_assert(!check_equality_comparable_with<int (*)(), int (S::*)() &&>());
230 static_assert(!check_equality_comparable_with < int (*)(),
231 int (S::*)() && noexcept > ());
232 static_assert(
233 !check_equality_comparable_with<int (*)(), int (S::*)() const&&>());
234 static_assert(!check_equality_comparable_with < int (*)(),
235 int (S::*)() const&& noexcept > ());
236 static_assert(
237 !check_equality_comparable_with<int (*)(), int (S::*)() volatile&&>());
238 static_assert(!check_equality_comparable_with < int (*)(),
239 int (S::*)() volatile&& noexcept > ());
240 static_assert(!check_equality_comparable_with<int (*)(),
241 int (S::*)() const volatile&&>());
242 static_assert(!check_equality_comparable_with < int (*)(),
243 int (S::*)() const volatile&& noexcept > ());
245 static_assert(check_equality_comparable_with<int (&)(), int (&)()>());
246 static_assert(!check_equality_comparable_with<int (&)(), int (S::*)()>());
247 static_assert(
248 !check_equality_comparable_with<int (&)(), int (S::*)() noexcept>());
249 static_assert(!check_equality_comparable_with<int (&)(), int (S::*)() const>());
250 static_assert(
251 !check_equality_comparable_with<int (&)(), int (S::*)() const noexcept>());
252 static_assert(
253 !check_equality_comparable_with<int (&)(), int (S::*)() volatile>());
254 static_assert(!check_equality_comparable_with<
255 int (&)(), int (S::*)() volatile noexcept>());
256 static_assert(
257 !check_equality_comparable_with<int (&)(), int (S::*)() const volatile>());
258 static_assert(!check_equality_comparable_with<
259 int (&)(), int (S::*)() const volatile noexcept>());
260 static_assert(!check_equality_comparable_with<int (&)(), int (S::*)() &>());
261 static_assert(
262 !check_equality_comparable_with<int (&)(), int (S::*)() & noexcept>());
263 static_assert(
264 !check_equality_comparable_with<int (&)(), int (S::*)() const&>());
265 static_assert(!check_equality_comparable_with<int (&)(),
266 int (S::*)() const & noexcept>());
267 static_assert(
268 !check_equality_comparable_with<int (&)(), int (S::*)() volatile&>());
269 static_assert(!check_equality_comparable_with<int (&)(), int (S::*)() volatile &
270 noexcept>());
271 static_assert(
272 !check_equality_comparable_with<int (&)(), int (S::*)() const volatile&>());
273 static_assert(!check_equality_comparable_with<
274 int (&)(), int (S::*)() const volatile & noexcept>());
275 static_assert(!check_equality_comparable_with<int (&)(), int (S::*)() &&>());
276 static_assert(!check_equality_comparable_with < int (&)(),
277 int (S::*)() && noexcept > ());
278 static_assert(
279 !check_equality_comparable_with<int (&)(), int (S::*)() const&&>());
280 static_assert(!check_equality_comparable_with < int (&)(),
281 int (S::*)() const&& noexcept > ());
282 static_assert(
283 !check_equality_comparable_with<int (&)(), int (S::*)() volatile&&>());
284 static_assert(!check_equality_comparable_with < int (&)(),
285 int (S::*)() volatile&& noexcept > ());
286 static_assert(!check_equality_comparable_with<int (&)(),
287 int (S::*)() const volatile&&>());
288 static_assert(!check_equality_comparable_with < int (&)(),
289 int (S::*)() const volatile&& noexcept > ());
291 static_assert(check_equality_comparable_with<int (S::*)(), int (S::*)()>());
292 static_assert(
293 check_equality_comparable_with<int (S::*)(), int (S::*)() noexcept>());
294 static_assert(
295 !check_equality_comparable_with<int (S::*)(), int (S::*)() const>());
296 static_assert(!check_equality_comparable_with<int (S::*)(),
297 int (S::*)() const noexcept>());
298 static_assert(
299 !check_equality_comparable_with<int (S::*)(), int (S::*)() volatile>());
300 static_assert(!check_equality_comparable_with<
301 int (S::*)(), int (S::*)() volatile noexcept>());
302 static_assert(!check_equality_comparable_with<int (S::*)(),
303 int (S::*)() const volatile>());
304 static_assert(!check_equality_comparable_with<
305 int (S::*)(), int (S::*)() const volatile noexcept>());
306 static_assert(!check_equality_comparable_with<int (S::*)(), int (S::*)() &>());
307 static_assert(
308 !check_equality_comparable_with<int (S::*)(), int (S::*)() & noexcept>());
309 static_assert(
310 !check_equality_comparable_with<int (S::*)(), int (S::*)() const&>());
311 static_assert(!check_equality_comparable_with<int (S::*)(),
312 int (S::*)() const & noexcept>());
313 static_assert(
314 !check_equality_comparable_with<int (S::*)(), int (S::*)() volatile&>());
315 static_assert(!check_equality_comparable_with<
316 int (S::*)(), int (S::*)() volatile & noexcept>());
317 static_assert(!check_equality_comparable_with<int (S::*)(),
318 int (S::*)() const volatile&>());
319 static_assert(!check_equality_comparable_with<
320 int (S::*)(), int (S::*)() const volatile & noexcept>());
321 static_assert(!check_equality_comparable_with<int (S::*)(), int (S::*)() &&>());
322 static_assert(!check_equality_comparable_with < int (S::*)(),
323 int (S::*)() && noexcept > ());
324 static_assert(
325 !check_equality_comparable_with<int (S::*)(), int (S::*)() const&&>());
326 static_assert(!check_equality_comparable_with < int (S::*)(),
327 int (S::*)() const&& noexcept > ());
328 static_assert(
329 !check_equality_comparable_with<int (S::*)(), int (S::*)() volatile&&>());
330 static_assert(!check_equality_comparable_with < int (S::*)(),
331 int (S::*)() volatile&& noexcept > ());
332 static_assert(!check_equality_comparable_with<int (S::*)(),
333 int (S::*)() const volatile&&>());
334 static_assert(!check_equality_comparable_with < int (S::*)(),
335 int (S::*)() const volatile&& noexcept > ());
337 static_assert(check_equality_comparable_with<int (S::*)() noexcept,
338 int (S::*)() noexcept>());
339 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
340 int (S::*)() const>());
341 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
342 int (S::*)() const noexcept>());
343 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
344 int (S::*)() volatile>());
345 static_assert(!check_equality_comparable_with<
346 int (S::*)() noexcept, int (S::*)() volatile noexcept>());
347 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
348 int (S::*)() const volatile>());
349 static_assert(!check_equality_comparable_with<
350 int (S::*)() noexcept, int (S::*)() const volatile noexcept>());
351 static_assert(
352 !check_equality_comparable_with<int (S::*)() noexcept, int (S::*)() &>());
353 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
354 int (S::*)() & noexcept>());
355 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
356 int (S::*)() const&>());
357 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
358 int (S::*)() const & noexcept>());
359 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
360 int (S::*)() volatile&>());
361 static_assert(!check_equality_comparable_with<
362 int (S::*)() noexcept, int (S::*)() volatile & noexcept>());
363 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
364 int (S::*)() const volatile&>());
365 static_assert(!check_equality_comparable_with<
366 int (S::*)() noexcept, int (S::*)() const volatile & noexcept>());
367 static_assert(
368 !check_equality_comparable_with<int (S::*)() noexcept, int (S::*)() &&>());
369 static_assert(!check_equality_comparable_with < int (S::*)() noexcept,
370 int (S::*)() && noexcept > ());
371 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
372 int (S::*)() const&&>());
373 static_assert(!check_equality_comparable_with < int (S::*)() noexcept,
374 int (S::*)() const&& noexcept > ());
375 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
376 int (S::*)() volatile&&>());
377 static_assert(!check_equality_comparable_with < int (S::*)() noexcept,
378 int (S::*)() volatile&& noexcept > ());
379 static_assert(!check_equality_comparable_with<int (S::*)() noexcept,
380 int (S::*)() const volatile&&>());
381 static_assert(!check_equality_comparable_with < int (S::*)() noexcept,
382 int (S::*)() const volatile&& noexcept > ());
384 static_assert(
385 check_equality_comparable_with<int (S::*)() const, int (S::*)() const>());
386 static_assert(check_equality_comparable_with<int (S::*)() const,
387 int (S::*)() const noexcept>());
388 static_assert(!check_equality_comparable_with<int (S::*)() const,
389 int (S::*)() volatile>());
390 static_assert(!check_equality_comparable_with<
391 int (S::*)() const, int (S::*)() volatile noexcept>());
392 static_assert(!check_equality_comparable_with<int (S::*)() const,
393 int (S::*)() const volatile>());
394 static_assert(!check_equality_comparable_with<
395 int (S::*)() const, int (S::*)() const volatile noexcept>());
396 static_assert(
397 !check_equality_comparable_with<int (S::*)() const, int (S::*)() &>());
398 static_assert(!check_equality_comparable_with<int (S::*)() const,
399 int (S::*)() & noexcept>());
400 static_assert(
401 !check_equality_comparable_with<int (S::*)() const, int (S::*)() const&>());
402 static_assert(!check_equality_comparable_with<int (S::*)() const,
403 int (S::*)() const & noexcept>());
404 static_assert(!check_equality_comparable_with<int (S::*)() const,
405 int (S::*)() volatile&>());
406 static_assert(!check_equality_comparable_with<
407 int (S::*)() const, int (S::*)() volatile & noexcept>());
408 static_assert(!check_equality_comparable_with<int (S::*)() const,
409 int (S::*)() const volatile&>());
410 static_assert(!check_equality_comparable_with<
411 int (S::*)() const, int (S::*)() const volatile & noexcept>());
412 static_assert(
413 !check_equality_comparable_with<int (S::*)() const, int (S::*)() &&>());
414 static_assert(!check_equality_comparable_with < int (S::*)() const,
415 int (S::*)() && noexcept > ());
416 static_assert(!check_equality_comparable_with<int (S::*)() const,
417 int (S::*)() const&&>());
418 static_assert(!check_equality_comparable_with < int (S::*)() const,
419 int (S::*)() const&& noexcept > ());
420 static_assert(!check_equality_comparable_with<int (S::*)() const,
421 int (S::*)() volatile&&>());
422 static_assert(!check_equality_comparable_with < int (S::*)() const,
423 int (S::*)() volatile&& noexcept > ());
424 static_assert(!check_equality_comparable_with<int (S::*)() const,
425 int (S::*)() const volatile&&>());
426 static_assert(!check_equality_comparable_with < int (S::*)() const,
427 int (S::*)() const volatile&& noexcept > ());
429 static_assert(check_equality_comparable_with<int (S::*)() const noexcept,
430 int (S::*)() const noexcept>());
431 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
432 int (S::*)() volatile>());
433 static_assert(!check_equality_comparable_with<
434 int (S::*)() const noexcept, int (S::*)() volatile noexcept>());
435 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
436 int (S::*)() const volatile>());
437 static_assert(
438 !check_equality_comparable_with<int (S::*)() const noexcept,
439 int (S::*)() const volatile noexcept>());
440 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
441 int (S::*)() &>());
442 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
443 int (S::*)() & noexcept>());
444 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
445 int (S::*)() const&>());
446 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
447 int (S::*)() const & noexcept>());
448 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
449 int (S::*)() volatile&>());
450 static_assert(!check_equality_comparable_with<
451 int (S::*)() const noexcept, int (S::*)() volatile & noexcept>());
452 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
453 int (S::*)() const volatile&>());
454 static_assert(
455 !check_equality_comparable_with<int (S::*)() const noexcept,
456 int (S::*)() const volatile & noexcept>());
457 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
458 int (S::*)() &&>());
459 static_assert(!check_equality_comparable_with < int (S::*)() const noexcept,
460 int (S::*)() && noexcept > ());
461 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
462 int (S::*)() const&&>());
463 static_assert(!check_equality_comparable_with < int (S::*)() const noexcept,
464 int (S::*)() const&& noexcept > ());
465 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
466 int (S::*)() volatile&&>());
467 static_assert(!check_equality_comparable_with < int (S::*)() const noexcept,
468 int (S::*)() volatile&& noexcept > ());
469 static_assert(!check_equality_comparable_with<int (S::*)() const noexcept,
470 int (S::*)() const volatile&&>());
471 static_assert(!check_equality_comparable_with < int (S::*)() const noexcept,
472 int (S::*)() const volatile&& noexcept > ());
474 static_assert(check_equality_comparable_with<int (S::*)() volatile,
475 int (S::*)() volatile>());
476 static_assert(check_equality_comparable_with<int (S::*)() volatile,
477 int (S::*)() volatile noexcept>());
478 static_assert(!check_equality_comparable_with<int (S::*)() volatile,
479 int (S::*)() const volatile>());
480 static_assert(!check_equality_comparable_with<
481 int (S::*)() volatile, int (S::*)() const volatile noexcept>());
482 static_assert(
483 !check_equality_comparable_with<int (S::*)() volatile, int (S::*)() &>());
484 static_assert(!check_equality_comparable_with<int (S::*)() volatile,
485 int (S::*)() & noexcept>());
486 static_assert(!check_equality_comparable_with<int (S::*)() volatile,
487 int (S::*)() const&>());
488 static_assert(!check_equality_comparable_with<int (S::*)() volatile,
489 int (S::*)() const & noexcept>());
490 static_assert(!check_equality_comparable_with<int (S::*)() volatile,
491 int (S::*)() volatile&>());
492 static_assert(!check_equality_comparable_with<
493 int (S::*)() volatile, int (S::*)() volatile & noexcept>());
494 static_assert(!check_equality_comparable_with<int (S::*)() volatile,
495 int (S::*)() const volatile&>());
496 static_assert(!check_equality_comparable_with<
497 int (S::*)() volatile, int (S::*)() const volatile & noexcept>());
498 static_assert(
499 !check_equality_comparable_with<int (S::*)() volatile, int (S::*)() &&>());
500 static_assert(!check_equality_comparable_with < int (S::*)() volatile,
501 int (S::*)() && noexcept > ());
502 static_assert(!check_equality_comparable_with<int (S::*)() volatile,
503 int (S::*)() const&&>());
504 static_assert(!check_equality_comparable_with < int (S::*)() volatile,
505 int (S::*)() const&& noexcept > ());
506 static_assert(!check_equality_comparable_with<int (S::*)() volatile,
507 int (S::*)() volatile&&>());
508 static_assert(!check_equality_comparable_with < int (S::*)() volatile,
509 int (S::*)() volatile&& noexcept > ());
510 static_assert(!check_equality_comparable_with<int (S::*)() volatile,
511 int (S::*)() const volatile&&>());
512 static_assert(!check_equality_comparable_with < int (S::*)() volatile,
513 int (S::*)() const volatile&& noexcept > ());
515 static_assert(check_equality_comparable_with<int (S::*)() volatile noexcept,
516 int (S::*)() volatile noexcept>());
517 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept,
518 int (S::*)() const volatile>());
519 static_assert(
520 !check_equality_comparable_with<int (S::*)() volatile noexcept,
521 int (S::*)() const volatile noexcept>());
522 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept,
523 int (S::*)() &>());
524 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept,
525 int (S::*)() & noexcept>());
526 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept,
527 int (S::*)() const&>());
528 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept,
529 int (S::*)() const & noexcept>());
530 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept,
531 int (S::*)() volatile&>());
532 static_assert(
533 !check_equality_comparable_with<int (S::*)() volatile noexcept,
534 int (S::*)() volatile & noexcept>());
535 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept,
536 int (S::*)() const volatile&>());
537 static_assert(
538 !check_equality_comparable_with<int (S::*)() volatile noexcept,
539 int (S::*)() const volatile & noexcept>());
540 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept,
541 int (S::*)() &&>());
542 static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept,
543 int (S::*)() && noexcept > ());
544 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept,
545 int (S::*)() const&&>());
546 static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept,
547 int (S::*)() const&& noexcept > ());
548 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept,
549 int (S::*)() volatile&&>());
550 static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept,
551 int (S::*)() volatile&& noexcept > ());
552 static_assert(!check_equality_comparable_with<int (S::*)() volatile noexcept,
553 int (S::*)() const volatile&&>());
554 static_assert(!check_equality_comparable_with < int (S::*)() volatile noexcept,
555 int (S::*)() const volatile&& noexcept > ());
557 static_assert(check_equality_comparable_with<int (S::*)() const volatile,
558 int (S::*)() const volatile>());
559 static_assert(
560 check_equality_comparable_with<int (S::*)() const volatile,
561 int (S::*)() const volatile noexcept>());
562 static_assert(!check_equality_comparable_with<int (S::*)() const volatile,
563 int (S::*)() &>());
564 static_assert(!check_equality_comparable_with<int (S::*)() const volatile,
565 int (S::*)() & noexcept>());
566 static_assert(!check_equality_comparable_with<int (S::*)() const volatile,
567 int (S::*)() const&>());
568 static_assert(!check_equality_comparable_with<int (S::*)() const volatile,
569 int (S::*)() const & noexcept>());
570 static_assert(!check_equality_comparable_with<int (S::*)() const volatile,
571 int (S::*)() volatile&>());
572 static_assert(!check_equality_comparable_with<
573 int (S::*)() const volatile, int (S::*)() volatile & noexcept>());
574 static_assert(!check_equality_comparable_with<int (S::*)() const volatile,
575 int (S::*)() const volatile&>());
576 static_assert(
577 !check_equality_comparable_with<int (S::*)() const volatile,
578 int (S::*)() const volatile & noexcept>());
579 static_assert(!check_equality_comparable_with<int (S::*)() const volatile,
580 int (S::*)() &&>());
581 static_assert(!check_equality_comparable_with < int (S::*)() const volatile,
582 int (S::*)() && noexcept > ());
583 static_assert(!check_equality_comparable_with<int (S::*)() const volatile,
584 int (S::*)() const&&>());
585 static_assert(!check_equality_comparable_with < int (S::*)() const volatile,
586 int (S::*)() const&& noexcept > ());
587 static_assert(!check_equality_comparable_with<int (S::*)() const volatile,
588 int (S::*)() volatile&&>());
589 static_assert(!check_equality_comparable_with < int (S::*)() const volatile,
590 int (S::*)() volatile&& noexcept > ());
591 static_assert(!check_equality_comparable_with<int (S::*)() const volatile,
592 int (S::*)() const volatile&&>());
593 static_assert(!check_equality_comparable_with < int (S::*)() const volatile,
594 int (S::*)() const volatile&& noexcept > ());
596 static_assert(
597 check_equality_comparable_with<int (S::*)() const volatile noexcept,
598 int (S::*)() const volatile noexcept>());
599 static_assert(!check_equality_comparable_with<
600 int (S::*)() const volatile noexcept, int (S::*)() &>());
601 static_assert(!check_equality_comparable_with<
602 int (S::*)() const volatile noexcept, int (S::*)() & noexcept>());
603 static_assert(!check_equality_comparable_with<
604 int (S::*)() const volatile noexcept, int (S::*)() const&>());
605 static_assert(
606 !check_equality_comparable_with<int (S::*)() const volatile noexcept,
607 int (S::*)() const & noexcept>());
608 static_assert(!check_equality_comparable_with<
609 int (S::*)() const volatile noexcept, int (S::*)() volatile&>());
610 static_assert(
611 !check_equality_comparable_with<int (S::*)() const volatile noexcept,
612 int (S::*)() volatile & noexcept>());
613 static_assert(
614 !check_equality_comparable_with<int (S::*)() const volatile noexcept,
615 int (S::*)() const volatile&>());
616 static_assert(
617 !check_equality_comparable_with<int (S::*)() const volatile noexcept,
618 int (S::*)() const volatile & noexcept>());
619 static_assert(!check_equality_comparable_with<
620 int (S::*)() const volatile noexcept, int (S::*)() &&>());
621 static_assert(!check_equality_comparable_with < int (S::*)()
622 const volatile noexcept,
623 int (S::*)() && noexcept > ());
624 static_assert(!check_equality_comparable_with<
625 int (S::*)() const volatile noexcept, int (S::*)() const&&>());
626 static_assert(!check_equality_comparable_with < int (S::*)()
627 const volatile noexcept,
628 int (S::*)() const&& noexcept > ());
629 static_assert(!check_equality_comparable_with<
630 int (S::*)() const volatile noexcept, int (S::*)() volatile&&>());
631 static_assert(!check_equality_comparable_with < int (S::*)()
632 const volatile noexcept,
633 int (S::*)() volatile&& noexcept > ());
634 static_assert(
635 !check_equality_comparable_with<int (S::*)() const volatile noexcept,
636 int (S::*)() const volatile&&>());
637 static_assert(!check_equality_comparable_with < int (S::*)()
638 const volatile noexcept,
639 int (S::*)() const volatile&& noexcept > ());
641 static_assert(check_equality_comparable_with<int (S::*)() &, int (S::*)() &>());
642 static_assert(
643 check_equality_comparable_with<int (S::*)() &, int (S::*)() & noexcept>());
644 static_assert(
645 !check_equality_comparable_with<int (S::*)() &, int (S::*)() const&>());
646 static_assert(!check_equality_comparable_with<int (S::*)() &,
647 int (S::*)() const & noexcept>());
648 static_assert(
649 !check_equality_comparable_with<int (S::*)() &, int (S::*)() volatile&>());
650 static_assert(!check_equality_comparable_with<
651 int (S::*)() &, int (S::*)() volatile & noexcept>());
652 static_assert(!check_equality_comparable_with<int (S::*)() &,
653 int (S::*)() const volatile&>());
654 static_assert(!check_equality_comparable_with<
655 int (S::*)() &, int (S::*)() const volatile & noexcept>());
656 static_assert(
657 !check_equality_comparable_with<int (S::*)() &, int (S::*)() &&>());
658 static_assert(!check_equality_comparable_with < int (S::*)() &,
659 int (S::*)() && noexcept > ());
660 static_assert(
661 !check_equality_comparable_with<int (S::*)() &, int (S::*)() const&&>());
662 static_assert(!check_equality_comparable_with < int (S::*)() &,
663 int (S::*)() const&& noexcept > ());
664 static_assert(
665 !check_equality_comparable_with<int (S::*)() &, int (S::*)() volatile&&>());
666 static_assert(!check_equality_comparable_with < int (S::*)() &,
667 int (S::*)() volatile&& noexcept > ());
668 static_assert(!check_equality_comparable_with<int (S::*)() &,
669 int (S::*)() const volatile&&>());
670 static_assert(!check_equality_comparable_with < int (S::*)() &,
671 int (S::*)() const volatile&& noexcept > ());
673 static_assert(check_equality_comparable_with<int (S::*)() & noexcept,
674 int (S::*)() & noexcept>());
675 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept,
676 int (S::*)() const&>());
677 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept,
678 int (S::*)() const & noexcept>());
679 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept,
680 int (S::*)() volatile&>());
681 static_assert(!check_equality_comparable_with<
682 int (S::*)() & noexcept, int (S::*)() volatile & noexcept>());
683 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept,
684 int (S::*)() const volatile&>());
685 static_assert(
686 !check_equality_comparable_with<int (S::*)() & noexcept,
687 int (S::*)() const volatile & noexcept>());
688 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept,
689 int (S::*)() &&>());
690 static_assert(!check_equality_comparable_with < int (S::*)() & noexcept,
691 int (S::*)() && noexcept > ());
692 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept,
693 int (S::*)() const&&>());
694 static_assert(!check_equality_comparable_with < int (S::*)() & noexcept,
695 int (S::*)() const&& noexcept > ());
696 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept,
697 int (S::*)() volatile&&>());
698 static_assert(!check_equality_comparable_with < int (S::*)() & noexcept,
699 int (S::*)() volatile&& noexcept > ());
700 static_assert(!check_equality_comparable_with<int (S::*)() & noexcept,
701 int (S::*)() const volatile&&>());
702 static_assert(!check_equality_comparable_with < int (S::*)() & noexcept,
703 int (S::*)() const volatile&& noexcept > ());
705 static_assert(
706 check_equality_comparable_with<int (S::*)() const&, int (S::*)() const&>());
707 static_assert(check_equality_comparable_with<int (S::*)() const&,
708 int (S::*)() const & noexcept>());
709 static_assert(!check_equality_comparable_with<int (S::*)() const&,
710 int (S::*)() volatile&>());
711 static_assert(!check_equality_comparable_with<
712 int (S::*)() const&, int (S::*)() volatile & noexcept>());
713 static_assert(!check_equality_comparable_with<int (S::*)() const&,
714 int (S::*)() const volatile&>());
715 static_assert(!check_equality_comparable_with<
716 int (S::*)() const&, int (S::*)() const volatile & noexcept>());
717 static_assert(
718 !check_equality_comparable_with<int (S::*)() const&, int (S::*)() &&>());
719 static_assert(!check_equality_comparable_with < int (S::*)() const&,
720 int (S::*)() && noexcept > ());
721 static_assert(!check_equality_comparable_with<int (S::*)() const&,
722 int (S::*)() const&&>());
723 static_assert(!check_equality_comparable_with < int (S::*)() const&,
724 int (S::*)() const&& noexcept > ());
725 static_assert(!check_equality_comparable_with<int (S::*)() const&,
726 int (S::*)() volatile&&>());
727 static_assert(!check_equality_comparable_with < int (S::*)() const&,
728 int (S::*)() volatile&& noexcept > ());
729 static_assert(!check_equality_comparable_with<int (S::*)() const&,
730 int (S::*)() const volatile&&>());
731 static_assert(!check_equality_comparable_with < int (S::*)() const&,
732 int (S::*)() const volatile&& noexcept > ());
734 static_assert(check_equality_comparable_with<int (S::*)() const & noexcept,
735 int (S::*)() const & noexcept>());
736 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept,
737 int (S::*)() volatile&>());
738 static_assert(
739 !check_equality_comparable_with<int (S::*)() const & noexcept,
740 int (S::*)() volatile & noexcept>());
741 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept,
742 int (S::*)() const volatile&>());
743 static_assert(
744 !check_equality_comparable_with<int (S::*)() const & noexcept,
745 int (S::*)() const volatile & noexcept>());
746 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept,
747 int (S::*)() &&>());
748 static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept,
749 int (S::*)() && noexcept > ());
750 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept,
751 int (S::*)() const&&>());
752 static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept,
753 int (S::*)() const&& noexcept > ());
754 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept,
755 int (S::*)() volatile&&>());
756 static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept,
757 int (S::*)() volatile&& noexcept > ());
758 static_assert(!check_equality_comparable_with<int (S::*)() const & noexcept,
759 int (S::*)() const volatile&&>());
760 static_assert(!check_equality_comparable_with < int (S::*)() const& noexcept,
761 int (S::*)() const volatile&& noexcept > ());
763 static_assert(check_equality_comparable_with<int (S::*)() volatile&,
764 int (S::*)() volatile&>());
765 static_assert(check_equality_comparable_with<
766 int (S::*)() volatile&, int (S::*)() volatile & noexcept>());
767 static_assert(!check_equality_comparable_with<int (S::*)() volatile&,
768 int (S::*)() const volatile&>());
769 static_assert(
770 !check_equality_comparable_with<int (S::*)() volatile&,
771 int (S::*)() const volatile & noexcept>());
772 static_assert(
773 !check_equality_comparable_with<int (S::*)() volatile&, int (S::*)() &&>());
774 static_assert(!check_equality_comparable_with < int (S::*)() volatile&,
775 int (S::*)() && noexcept > ());
776 static_assert(!check_equality_comparable_with<int (S::*)() volatile&,
777 int (S::*)() const&&>());
778 static_assert(!check_equality_comparable_with < int (S::*)() volatile&,
779 int (S::*)() const&& noexcept > ());
780 static_assert(!check_equality_comparable_with<int (S::*)() volatile&,
781 int (S::*)() volatile&&>());
782 static_assert(!check_equality_comparable_with < int (S::*)() volatile&,
783 int (S::*)() volatile&& noexcept > ());
784 static_assert(!check_equality_comparable_with<int (S::*)() volatile&,
785 int (S::*)() const volatile&&>());
786 static_assert(!check_equality_comparable_with < int (S::*)() volatile&,
787 int (S::*)() const volatile&& noexcept > ());
789 static_assert(
790 check_equality_comparable_with<int (S::*)() volatile & noexcept,
791 int (S::*)() volatile & noexcept>());
792 static_assert(!check_equality_comparable_with<int (S::*)() volatile & noexcept,
793 int (S::*)() const volatile&>());
794 static_assert(
795 !check_equality_comparable_with<int (S::*)() volatile & noexcept,
796 int (S::*)() const volatile & noexcept>());
797 static_assert(!check_equality_comparable_with<int (S::*)() volatile & noexcept,
798 int (S::*)() &&>());
799 static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept,
800 int (S::*)() && noexcept > ());
801 static_assert(!check_equality_comparable_with<int (S::*)() volatile & noexcept,
802 int (S::*)() const&&>());
803 static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept,
804 int (S::*)() const&& noexcept > ());
805 static_assert(!check_equality_comparable_with<int (S::*)() volatile & noexcept,
806 int (S::*)() volatile&&>());
807 static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept,
808 int (S::*)() volatile&& noexcept > ());
809 static_assert(!check_equality_comparable_with<int (S::*)() volatile & noexcept,
810 int (S::*)() const volatile&&>());
811 static_assert(!check_equality_comparable_with < int (S::*)() volatile& noexcept,
812 int (S::*)() const volatile&& noexcept > ());
814 static_assert(check_equality_comparable_with<int (S::*)() const volatile&,
815 int (S::*)() const volatile&>());
816 static_assert(
817 check_equality_comparable_with<int (S::*)() const volatile&,
818 int (S::*)() const volatile & noexcept>());
819 static_assert(!check_equality_comparable_with<int (S::*)() const volatile&,
820 int (S::*)() &&>());
821 static_assert(!check_equality_comparable_with < int (S::*)() const volatile&,
822 int (S::*)() && noexcept > ());
823 static_assert(!check_equality_comparable_with<int (S::*)() const volatile&,
824 int (S::*)() const&&>());
825 static_assert(!check_equality_comparable_with < int (S::*)() const volatile&,
826 int (S::*)() const&& noexcept > ());
827 static_assert(!check_equality_comparable_with<int (S::*)() const volatile&,
828 int (S::*)() volatile&&>());
829 static_assert(!check_equality_comparable_with < int (S::*)() const volatile&,
830 int (S::*)() volatile&& noexcept > ());
831 static_assert(!check_equality_comparable_with<int (S::*)() const volatile&,
832 int (S::*)() const volatile&&>());
833 static_assert(!check_equality_comparable_with < int (S::*)() const volatile&,
834 int (S::*)() const volatile&& noexcept > ());
836 static_assert(
837 check_equality_comparable_with<int (S::*)() const volatile & noexcept,
838 int (S::*)() const volatile & noexcept>());
839 static_assert(!check_equality_comparable_with<
840 int (S::*)() const volatile & noexcept, int (S::*)() &&>());
841 static_assert(!check_equality_comparable_with < int (S::*)()
842 const volatile& noexcept,
843 int (S::*)() && noexcept > ());
844 static_assert(!check_equality_comparable_with<
845 int (S::*)() const volatile & noexcept, int (S::*)() const&&>());
846 static_assert(!check_equality_comparable_with < int (S::*)()
847 const volatile& noexcept,
848 int (S::*)() const&& noexcept > ());
849 static_assert(
850 !check_equality_comparable_with<int (S::*)() const volatile & noexcept,
851 int (S::*)() volatile&&>());
852 static_assert(!check_equality_comparable_with < int (S::*)()
853 const volatile& noexcept,
854 int (S::*)() volatile&& noexcept > ());
855 static_assert(
856 !check_equality_comparable_with<int (S::*)() const volatile & noexcept,
857 int (S::*)() const volatile&&>());
858 static_assert(!check_equality_comparable_with < int (S::*)()
859 const volatile& noexcept,
860 int (S::*)() const volatile&& noexcept > ());
862 static_assert(
863 check_equality_comparable_with<int (S::*)() &&, int (S::*)() &&>());
864 static_assert(check_equality_comparable_with<int (S::*)() &&,
865 int (S::*)() && noexcept>());
866 static_assert(
867 !check_equality_comparable_with<int (S::*)() &&, int (S::*)() const&&>());
868 static_assert(!check_equality_comparable_with < int (S::*)() &&,
869 int (S::*)() const&& noexcept > ());
870 static_assert(!check_equality_comparable_with<int (S::*)() &&,
871 int (S::*)() volatile&&>());
872 static_assert(!check_equality_comparable_with < int (S::*)() &&,
873 int (S::*)() volatile&& noexcept > ());
874 static_assert(!check_equality_comparable_with<int (S::*)() &&,
875 int (S::*)() const volatile&&>());
876 static_assert(!check_equality_comparable_with < int (S::*)() &&,
877 int (S::*)() const volatile&& noexcept > ());
879 static_assert(check_equality_comparable_with<int (S::*)() && noexcept,
880 int (S::*)() && noexcept>());
881 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept,
882 int (S::*)() const&& > ());
883 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept,
884 int (S::*)() const&& noexcept > ());
885 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept,
886 int (S::*)() volatile&& > ());
887 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept,
888 int (S::*)() volatile&& noexcept > ());
889 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept,
890 int (S::*)() const volatile&& > ());
891 static_assert(!check_equality_comparable_with < int (S::*)() && noexcept,
892 int (S::*)() const volatile&& noexcept > ());
894 static_assert(check_equality_comparable_with<int (S::*)() const&&,
895 int (S::*)() const&&>());
896 static_assert(check_equality_comparable_with<int (S::*)() const&&,
897 int (S::*)() const && noexcept>());
898 static_assert(!check_equality_comparable_with<int (S::*)() const&&,
899 int (S::*)() volatile&&>());
900 static_assert(!check_equality_comparable_with < int (S::*)() const&&,
901 int (S::*)() volatile&& noexcept > ());
902 static_assert(!check_equality_comparable_with<int (S::*)() const&&,
903 int (S::*)() const volatile&&>());
904 static_assert(!check_equality_comparable_with < int (S::*)() const&&,
905 int (S::*)() const volatile&& noexcept > ());
907 static_assert(check_equality_comparable_with<int (S::*)() const && noexcept,
908 int (S::*)() const && noexcept>());
909 static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept,
910 int (S::*)() volatile&& > ());
911 static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept,
912 int (S::*)() volatile&& noexcept > ());
913 static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept,
914 int (S::*)() const volatile&& > ());
915 static_assert(!check_equality_comparable_with < int (S::*)() const&& noexcept,
916 int (S::*)() const volatile&& noexcept > ());
918 static_assert(check_equality_comparable_with<int (S::*)() volatile&&,
919 int (S::*)() volatile&&>());
920 static_assert(check_equality_comparable_with<
921 int (S::*)() volatile&&, int (S::*)() volatile && noexcept>());
922 static_assert(!check_equality_comparable_with<int (S::*)() volatile&&,
923 int (S::*)() const volatile&&>());
924 static_assert(!check_equality_comparable_with < int (S::*)() volatile&&,
925 int (S::*)() const volatile&& noexcept > ());
927 static_assert(
928 check_equality_comparable_with<int (S::*)() volatile && noexcept,
929 int (S::*)() volatile && noexcept>());
930 static_assert(!check_equality_comparable_with <
931 int (S::*)() volatile&& noexcept,
932 int (S::*)() const volatile&& > ());
933 static_assert(!check_equality_comparable_with <
934 int (S::*)() volatile&& noexcept,
935 int (S::*)() const volatile&& noexcept > ());
937 static_assert(check_equality_comparable_with<int (S::*)() const volatile&&,
938 int (S::*)() const volatile&&>());
939 static_assert(
940 check_equality_comparable_with<int (S::*)() const volatile&&,
941 int (S::*)() const volatile && noexcept>());
942 static_assert(
943 check_equality_comparable_with<int (S::*)() const volatile && noexcept,
944 int (S::*)() const volatile && noexcept>());
946 static_assert(!check_equality_comparable_with<std::nullptr_t, int>());
947 static_assert(check_equality_comparable_with<std::nullptr_t, int*>());
948 static_assert(check_equality_comparable_with<std::nullptr_t, int[5]>());
949 static_assert(check_equality_comparable_with<std::nullptr_t, int (*)()>());
950 static_assert(check_equality_comparable_with<std::nullptr_t, int (&)()>());
951 static_assert(check_equality_comparable_with<std::nullptr_t, int (S::*)()>());
952 static_assert(
953 check_equality_comparable_with<std::nullptr_t, int (S::*)() noexcept>());
954 static_assert(
955 check_equality_comparable_with<std::nullptr_t, int (S::*)() const>());
956 static_assert(check_equality_comparable_with<std::nullptr_t,
957 int (S::*)() const noexcept>());
958 static_assert(
959 check_equality_comparable_with<std::nullptr_t, int (S::*)() volatile>());
960 static_assert(check_equality_comparable_with<std::nullptr_t,
961 int (S::*)() volatile noexcept>());
962 static_assert(check_equality_comparable_with<std::nullptr_t,
963 int (S::*)() const volatile>());
964 static_assert(check_equality_comparable_with<
965 std::nullptr_t, int (S::*)() const volatile noexcept>());
966 static_assert(check_equality_comparable_with<std::nullptr_t, int (S::*)() &>());
967 static_assert(
968 check_equality_comparable_with<std::nullptr_t, int (S::*)() & noexcept>());
969 static_assert(
970 check_equality_comparable_with<std::nullptr_t, int (S::*)() const&>());
971 static_assert(check_equality_comparable_with<std::nullptr_t,
972 int (S::*)() const & noexcept>());
973 static_assert(
974 check_equality_comparable_with<std::nullptr_t, int (S::*)() volatile&>());
975 static_assert(check_equality_comparable_with<
976 std::nullptr_t, int (S::*)() volatile & noexcept>());
977 static_assert(check_equality_comparable_with<std::nullptr_t,
978 int (S::*)() const volatile&>());
979 static_assert(check_equality_comparable_with<
980 std::nullptr_t, int (S::*)() const volatile & noexcept>());
981 static_assert(
982 check_equality_comparable_with<std::nullptr_t, int (S::*)() &&>());
983 static_assert(
984 check_equality_comparable_with<std::nullptr_t, int (S::*)() && noexcept>());
985 static_assert(
986 check_equality_comparable_with<std::nullptr_t, int (S::*)() const&&>());
987 static_assert(check_equality_comparable_with<std::nullptr_t,
988 int (S::*)() const && noexcept>());
989 static_assert(
990 check_equality_comparable_with<std::nullptr_t, int (S::*)() volatile&&>());
991 static_assert(check_equality_comparable_with<
992 std::nullptr_t, int (S::*)() volatile && noexcept>());
993 static_assert(check_equality_comparable_with<std::nullptr_t,
994 int (S::*)() const volatile&&>());
995 static_assert(check_equality_comparable_with<
996 std::nullptr_t, int (S::*)() const volatile && noexcept>());
998 static_assert(!std::equality_comparable_with<void, int>);
999 static_assert(!std::equality_comparable_with<void, int*>);
1000 static_assert(!std::equality_comparable_with<void, std::nullptr_t>);
1001 static_assert(!std::equality_comparable_with<void, int[5]>);
1002 static_assert(!std::equality_comparable_with<void, int (*)()>);
1003 static_assert(!std::equality_comparable_with<void, int (&)()>);
1004 static_assert(!std::equality_comparable_with<void, int S::*>);
1005 static_assert(!std::equality_comparable_with<void, int (S::*)()>);
1006 static_assert(!std::equality_comparable_with<void, int (S::*)() noexcept>);
1007 static_assert(!std::equality_comparable_with<void, int (S::*)() const>);
1008 static_assert(
1009 !std::equality_comparable_with<void, int (S::*)() const noexcept>);
1010 static_assert(!std::equality_comparable_with<void, int (S::*)() volatile>);
1011 static_assert(
1012 !std::equality_comparable_with<void, int (S::*)() volatile noexcept>);
1013 static_assert(
1014 !std::equality_comparable_with<void, int (S::*)() const volatile>);
1015 static_assert(
1016 !std::equality_comparable_with<void, int (S::*)() const volatile noexcept>);
1017 static_assert(!std::equality_comparable_with<void, int (S::*)() &>);
1018 static_assert(!std::equality_comparable_with<void, int (S::*)() & noexcept>);
1019 static_assert(!std::equality_comparable_with<void, int (S::*)() const&>);
1020 static_assert(
1021 !std::equality_comparable_with<void, int (S::*)() const & noexcept>);
1022 static_assert(!std::equality_comparable_with<void, int (S::*)() volatile&>);
1023 static_assert(
1024 !std::equality_comparable_with<void, int (S::*)() volatile & noexcept>);
1025 static_assert(
1026 !std::equality_comparable_with<void, int (S::*)() const volatile&>);
1027 static_assert(!std::equality_comparable_with<void, int (S::*)() const volatile &
1028 noexcept>);
1029 static_assert(!std::equality_comparable_with<void, int (S::*)() &&>);
1030 static_assert(!std::equality_comparable_with < void,
1031 int (S::*)() && noexcept >);
1032 static_assert(!std::equality_comparable_with<void, int (S::*)() const&&>);
1033 static_assert(!std::equality_comparable_with < void,
1034 int (S::*)() const&& noexcept >);
1035 static_assert(!std::equality_comparable_with<void, int (S::*)() volatile&&>);
1036 static_assert(!std::equality_comparable_with < void,
1037 int (S::*)() volatile&& noexcept >);
1038 static_assert(
1039 !std::equality_comparable_with<void, int (S::*)() const volatile&&>);
1040 static_assert(!std::equality_comparable_with < void,
1041 int (S::*)() const volatile&& noexcept >);
1042 } // namespace fundamentals
1044 namespace standard_types {
1045 static_assert(check_equality_comparable_with<std::array<int, 10>,
1046 std::array<int, 10> >());
1047 static_assert(!check_equality_comparable_with<std::array<int, 10>,
1048 std::array<double, 10> >());
1049 static_assert(
1050 check_equality_comparable_with<std::deque<int>, std::deque<int> >());
1051 static_assert(
1052 !check_equality_comparable_with<std::deque<int>, std::vector<int> >());
1053 static_assert(check_equality_comparable_with<std::forward_list<int>,
1054 std::forward_list<int> >());
1055 static_assert(!check_equality_comparable_with<std::forward_list<int>,
1056 std::vector<int> >());
1057 static_assert(
1058 check_equality_comparable_with<std::list<int>, std::list<int> >());
1059 static_assert(
1060 !check_equality_comparable_with<std::list<int>, std::vector<int> >());
1062 #ifndef TEST_HAS_NO_THREADS
1063 static_assert(!check_equality_comparable_with<std::lock_guard<std::mutex>,
1064 std::lock_guard<std::mutex> >());
1065 static_assert(!check_equality_comparable_with<std::lock_guard<std::mutex>,
1066 std::vector<int> >());
1067 static_assert(!check_equality_comparable_with<std::mutex, std::mutex>());
1068 static_assert(!check_equality_comparable_with<std::mutex, std::vector<int> >());
1069 #endif
1071 static_assert(check_equality_comparable_with<std::map<int, void*>,
1072 std::map<int, void*> >());
1073 static_assert(
1074 !check_equality_comparable_with<std::map<int, void*>, std::vector<int> >());
1075 static_assert(
1076 check_equality_comparable_with<std::optional<std::vector<int> >,
1077 std::optional<std::vector<int> > >());
1078 static_assert(check_equality_comparable_with<std::optional<std::vector<int> >,
1079 std::vector<int> >());
1080 static_assert(
1081 check_equality_comparable_with<std::vector<int>, std::vector<int> >());
1082 static_assert(!check_equality_comparable_with<std::vector<int>, int>());
1083 } // namespace standard_types
1085 namespace types_fit_for_purpose {
1086 static_assert(
1087 check_equality_comparable_with<cxx20_member_eq, cxx20_member_eq>());
1088 static_assert(
1089 check_equality_comparable_with<cxx20_friend_eq, cxx20_friend_eq>());
1090 static_assert(
1091 !check_equality_comparable_with<cxx20_member_eq, cxx20_friend_eq>());
1093 static_assert(check_equality_comparable_with<member_three_way_comparable,
1094 member_three_way_comparable>());
1095 static_assert(check_equality_comparable_with<friend_three_way_comparable,
1096 friend_three_way_comparable>());
1097 static_assert(!check_equality_comparable_with<member_three_way_comparable,
1098 friend_three_way_comparable>());
1100 static_assert(
1101 check_equality_comparable_with<explicit_operators, explicit_operators>());
1102 static_assert(check_equality_comparable_with<equality_comparable_with_ec1,
1103 equality_comparable_with_ec1>());
1104 static_assert(check_equality_comparable_with<different_return_types,
1105 different_return_types>());
1106 static_assert(check_equality_comparable_with<explicit_operators,
1107 equality_comparable_with_ec1>());
1108 static_assert(check_equality_comparable_with<explicit_operators,
1109 different_return_types>());
1111 static_assert(check_equality_comparable_with<one_way_eq, one_way_eq>());
1112 static_assert(
1113 std::common_reference_with<one_way_eq const&, explicit_operators const&>);
1114 static_assert(
1115 !check_equality_comparable_with<one_way_eq, explicit_operators>());
1117 static_assert(check_equality_comparable_with<one_way_ne, one_way_ne>());
1118 static_assert(
1119 std::common_reference_with<one_way_ne const&, explicit_operators const&>);
1120 static_assert(
1121 !check_equality_comparable_with<one_way_ne, explicit_operators>());
1122 } // namespace types_fit_for_purpose