libstdc++: Simplify std::three_way_comparable_with (LWG 3360)
authorJonathan Wakely <jwakely@redhat.com>
Wed, 19 Feb 2020 21:45:59 +0000 (21:45 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Wed, 19 Feb 2020 21:49:24 +0000 (21:49 +0000)
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).

libstdc++-v3/ChangeLog
libstdc++-v3/libsupc++/compare

index 1711a35925625cd1aa20e39991079e8ab48ab082..622c2948eab8f43470c34def48b9f376e13e127c 100644 (file)
@@ -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
index a74ebc845bf8e8b9c55ea6c1ab1b0b6c631f3596..b88b691b9e11b93adaf32b11482c58c6ad2d93ee 100644 (file)
@@ -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>;