[gcc(refs/users/guojiufu/heads/guojiufu-branch)] libstdc++: Simplify std::three_way_comparable_with (LWG 3360)

Jiu Fu Guo guojiufu@gcc.gnu.org
Wed Mar 11 02:08:37 GMT 2020


https://gcc.gnu.org/g:256f67aa078de0e7bf53a0870c2cb87ab90cda09

commit 256f67aa078de0e7bf53a0870c2cb87ab90cda09
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Wed Feb 19 21:45:59 2020 +0000

    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).

Diff:
---
 libstdc++-v3/ChangeLog         |  4 ++++
 libstdc++-v3/libsupc++/compare | 10 ++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 1711a359256..622c2948eab 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 a74ebc845bf..b88b691b9e1 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>;


More information about the Libstdc++-cvs mailing list