@@ -293,20 +293,15 @@ concept HasOperatorGreaterThanEqual = requires(T1 t1, T2 t2) { t1 >= t2; };
293
293
template <typename T1, typename T2 = T1>
294
294
concept HasOperatorSpaceship = requires (T1 t1, T2 t2) { t1 <=> t2; };
295
295
296
- template <typename T1, typename T2 = T1>
297
- concept CanCompareWithSpaceship = HasOperatorSpaceship<T1, T2> && requires (T1 t1, T2 t2) {
298
- { t1 <=> t2 } -> std::same_as<std::strong_ordering>;
299
- };
300
-
301
- template <typename T1, typename T2 = T1>
302
- concept CanCompare =
303
- HasOperatorEqual<T1, T2> && HasOperatorNotEqual<T1, T2> && HasOperatorLessThan<T1, T2> &&
304
- HasOperatorGreaterThan<T1, T2> && HasOperatorLessThanEqual<T1, T2> && HasOperatorGreaterThanEqual<T1, T2>;
305
-
306
296
struct NonComparable {};
307
-
308
297
static_assert (!std::equality_comparable<NonComparable>);
309
- static_assert (!CanCompare<NonComparable>);
298
+ static_assert (!HasOperatorEqual<NonComparable>);
299
+ static_assert (!HasOperatorNotEqual<NonComparable>);
300
+ static_assert (!HasOperatorLessThan<NonComparable>);
301
+ static_assert (!HasOperatorGreaterThan<NonComparable>);
302
+ static_assert (!HasOperatorLessThanEqual<NonComparable>);
303
+ static_assert (!HasOperatorGreaterThanEqual<NonComparable>);
304
+ static_assert (!HasOperatorSpaceship<NonComparable>);
310
305
311
306
class EqualityComparable {
312
307
public:
@@ -318,26 +313,29 @@ class EqualityComparable {
318
313
int value_;
319
314
};
320
315
static_assert (std::equality_comparable<EqualityComparable>);
316
+ static_assert (HasOperatorEqual<EqualityComparable>);
317
+ static_assert (HasOperatorNotEqual<EqualityComparable>);
321
318
322
319
class ThreeWayComparable {
323
320
public:
324
321
constexpr ThreeWayComparable (int value) : value_{value} {};
325
322
326
- friend constexpr std::strong_ordering operator <=>(const ThreeWayComparable&, const ThreeWayComparable&) noexcept = default ;
327
323
friend constexpr bool operator ==(const ThreeWayComparable&, const ThreeWayComparable&) noexcept = default ;
324
+ friend constexpr std::strong_ordering
325
+ operator <=>(const ThreeWayComparable&, const ThreeWayComparable&) noexcept = default ;
326
+
328
327
private:
329
328
int value_;
330
329
};
331
330
static_assert (std::equality_comparable<ThreeWayComparable>);
331
+ static_assert (std::three_way_comparable<ThreeWayComparable>);
332
332
static_assert (HasOperatorEqual<ThreeWayComparable>);
333
333
static_assert (HasOperatorNotEqual<ThreeWayComparable>);
334
334
static_assert (HasOperatorLessThan<ThreeWayComparable>);
335
335
static_assert (HasOperatorGreaterThan<ThreeWayComparable>);
336
336
static_assert (HasOperatorLessThanEqual<ThreeWayComparable>);
337
337
static_assert (HasOperatorGreaterThanEqual<ThreeWayComparable>);
338
338
static_assert (HasOperatorSpaceship<ThreeWayComparable>);
339
- static_assert (CanCompare<ThreeWayComparable>);
340
- static_assert (CanCompareWithSpaceship<ThreeWayComparable>);
341
339
342
340
#endif // TEST_STD_VER >= 26
343
341
0 commit comments