2525
2626#if TEST_STD_VER >= 26
2727
28- // template <typename T>
29- // class EqualityComparable {
30- // public:
31- // constexpr EqualityComparable(T value) : value_{value} {};
32-
33- // friend constexpr bool operator==(const EqualityComparable&, const EqualityComparable&) noexcept = default;
34-
35- // private:
36- // T value_;
37- // };
38-
39- // static_assert(std::equality_comparable<EqualityComparable<std::pair<int,int>>>);
40- // // static_assert(std::equality_comparable<EqualityComparable<std::pair<int,int>>, std::pair<int,int>>);
41- // // static_assert(std::equality_comparable<EqualityComparable<std::pair<int,int>>, EqualityComparable<std::pair<int,int>>>);
42- // // static_assert(std::equality_comparable<EqualityComparable<std::pair<int,int>>, std::pair<int,int>, std::pair<int,int>>);
43- // // static_assert(std::equality_comparable<EqualityComparable<std::pair<int,int>>, EqualityComparable<std::pair<int,int>>, std::pair<int,int>>);
44- // // static_assert(std::equality_comparable<EqualityComparable<std::pair<int,int>>, std::pair<int,int>, EqualityComparable<std::pair<int,int>>>);
45- // // static_assert(std::equality_comparable<EqualityComparable<std::pair<int,int>>, EqualityComparable<std::pair<int,int>>, EqualityComparable<std::pair<int,int>>>);
46- // static_assert(std::equality_comparable<EqualityComparable<std::pair<int,int>>, std::pair<int,int>, std::pair<int,int>, EqualityComparable<std::pair<int,int>>>);
47- // static_assert(EqualityComparable<std::pair<int,int>>{std::pair{94, 82}} == EqualityComparable<std::pair<int,int>>{std::pair{94, 82}});
48- // static_assert(EqualityComparable<std::pair<int,int>>{std::pair{94, 82}} != EqualityComparable<std::pair<int,int>>{std::pair{82, 82}});
28+ // Test SFINAE.
4929
5030struct EqualityComparable {
5131 constexpr EqualityComparable (int value) : value_{value} {};
@@ -60,43 +40,15 @@ static_assert(EqualityComparable{94} == EqualityComparable{94});
6040static_assert (EqualityComparable{94 } != EqualityComparable{82 });
6141
6242static_assert (std::equality_comparable<std::pair<EqualityComparable, EqualityComparable>>);
63- static_assert (std::pair{EqualityComparable{94 }, EqualityComparable{94 }} ==
64- std::pair{EqualityComparable{94 }, EqualityComparable{94 }});
65- static_assert (std::pair{EqualityComparable{82 }, EqualityComparable{94 }} !=
66- std::pair{EqualityComparable{94 }, EqualityComparable{94 }});
67- static_assert (std::pair{EqualityComparable{94 }, EqualityComparable{82 }} !=
68- std::pair{EqualityComparable{94 }, EqualityComparable{94 }});
6943
7044struct NonComparable {};
7145
72- static_assert (!std::three_way_comparable<std::pair<NonComparable, NonComparable>>);
73- static_assert (!std::three_way_comparable<std::pair<EqualityComparable, NonComparable>>);
74- static_assert (!std::three_way_comparable<std::pair<NonComparable, EqualityComparable>>);
46+ static_assert (!std::equality_comparable<NonComparable>);
7547
7648static_assert (!std::equality_comparable<std::pair<EqualityComparable, NonComparable>>);
7749static_assert (!std::equality_comparable<std::pair<NonComparable, EqualityComparable>>);
7850
7951
80- template <typename T, typename U>
81- concept HasCompare = requires (T t, U u) {
82- { t == u } -> std::same_as<bool >;
83- { t != u } -> std::same_as<bool >;
84- { t < u } -> std::same_as<bool >;
85- { t > u } -> std::same_as<bool >;
86- { t <= u } -> std::same_as<bool >;
87- { t >= u } -> std::same_as<bool >;
88- };
89-
90- template <typename T, typename U>
91- concept HasCompare = requires (std::pair p1, std::pair p2) {
92- { t == u } -> std::same_as<bool >;
93- { t != u } -> std::same_as<bool >;
94- { t < u } -> std::same_as<bool >;
95- { t > u } -> std::same_as<bool >;
96- { t <= u } -> std::same_as<bool >;
97- { t >= u } -> std::same_as<bool >;
98- };
99-
10052#endif // TEST_STD_VER >= 26
10153
10254int main (int , char **)
0 commit comments