diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2020-02-19 21:45:59 +0000 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2020-02-19 21:49:24 +0000 |
commit | 256f67aa078de0e7bf53a0870c2cb87ab90cda09 (patch) | |
tree | 480cfbf5480476fba55fe91099be74e6493c0dbd | |
parent | 0294dc5f4eec5a07d70fac48f75c498c3b1a339b (diff) | |
download | gcc-256f67aa078de0e7bf53a0870c2cb87ab90cda09.zip gcc-256f67aa078de0e7bf53a0870c2cb87ab90cda09.tar.gz gcc-256f67aa078de0e7bf53a0870c2cb87ab90cda09.tar.bz2 |
libstdc++: Simplify std::three_way_comparable_with (LWG 3360)
This also removes a useless condition that was supposed to be removed by
the P1959R0 changes, but left in when that was implemented.
* libsupc++/compare (three_way_comparable): Remove always-false check
that should have been removed with weak_equality (P1959R0).
(three_way_comparable_with): Likewise. Reorder requirements (LWG 3360).
-rw-r--r-- | libstdc++-v3/ChangeLog | 4 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/compare | 10 |
2 files changed, 8 insertions, 6 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1711a35..622c294 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,9 @@ 2020-02-19 Jonathan Wakely <jwakely@redhat.com> + * libsupc++/compare (three_way_comparable): Remove always-false check + that should have been removed with weak_equality (P1959R0). + (three_way_comparable_with): Likewise. Reorder requirements (LWG 3360). + * include/std/concepts (__detail::__partially_ordered_with): Move here from <compare>. (totally_ordered, totally_ordered_with): Use __partially_ordered_with diff --git a/libstdc++-v3/libsupc++/compare b/libstdc++-v3/libsupc++/compare index a74ebc8..b88b691 100644 --- a/libstdc++-v3/libsupc++/compare +++ b/libstdc++-v3/libsupc++/compare @@ -417,8 +417,7 @@ namespace std template<typename _Tp, typename _Cat = partial_ordering> concept three_way_comparable = __detail::__weakly_eq_cmp_with<_Tp, _Tp> - && (!convertible_to<_Cat, partial_ordering> - || __detail::__partially_ordered_with<_Tp, _Tp>) + && __detail::__partially_ordered_with<_Tp, _Tp> && requires(const remove_reference_t<_Tp>& __a, const remove_reference_t<_Tp>& __b) { { __a <=> __b } -> __detail::__compares_as<_Cat>; @@ -426,16 +425,15 @@ namespace std template<typename _Tp, typename _Up, typename _Cat = partial_ordering> concept three_way_comparable_with - = __detail::__weakly_eq_cmp_with<_Tp, _Up> - && (!convertible_to<_Cat, partial_ordering> - || __detail::__partially_ordered_with<_Tp, _Up>) - && three_way_comparable<_Tp, _Cat> + = three_way_comparable<_Tp, _Cat> && three_way_comparable<_Up, _Cat> && common_reference_with<const remove_reference_t<_Tp>&, const remove_reference_t<_Up>&> && three_way_comparable< common_reference_t<const remove_reference_t<_Tp>&, const remove_reference_t<_Up>&>, _Cat> + && __detail::__weakly_eq_cmp_with<_Tp, _Up> + && __detail::__partially_ordered_with<_Tp, _Up> && requires(const remove_reference_t<_Tp>& __t, const remove_reference_t<_Up>& __u) { { __t <=> __u } -> __detail::__compares_as<_Cat>; |