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).
This commit is contained in:
parent
0294dc5f4e
commit
256f67aa07
|
@ -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
|
||||
|
|
|
@ -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>;
|
||||
|
|
Loading…
Reference in New Issue