diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2020-02-19 21:40:03 +0000 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2020-02-19 21:40:03 +0000 |
commit | 0294dc5f4eec5a07d70fac48f75c498c3b1a339b (patch) | |
tree | 60bf1841275438ef8d86f25753108a0488f78026 | |
parent | 241ed965509ac931e9ae5f331d0294c1ee4ccd89 (diff) | |
download | gcc-0294dc5f4eec5a07d70fac48f75c498c3b1a339b.zip gcc-0294dc5f4eec5a07d70fac48f75c498c3b1a339b.tar.gz gcc-0294dc5f4eec5a07d70fac48f75c498c3b1a339b.tar.bz2 |
libstdc++: Simplify std::totally_ordered (LWG 3331)
* include/std/concepts (__detail::__partially_ordered_with): Move here
from <compare>.
(totally_ordered, totally_ordered_with): Use __partially_ordered_with
to simplify definition (LWG 3331).
* libsupc++/compare (__detail::__partially_ordered_with): Move to
<concepts>.
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/std/concepts | 35 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/compare | 14 |
3 files changed, 26 insertions, 30 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 3941bcb..1711a35 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,12 @@ 2020-02-19 Jonathan Wakely <jwakely@redhat.com> + * include/std/concepts (__detail::__partially_ordered_with): Move here + from <compare>. + (totally_ordered, totally_ordered_with): Use __partially_ordered_with + to simplify definition (LWG 3331). + * libsupc++/compare (__detail::__partially_ordered_with): Move to + <concepts>. + * include/std/concepts (totally_ordered_with): Remove redundant requirement (LWG 3329). diff --git a/libstdc++-v3/include/std/concepts b/libstdc++-v3/include/std/concepts index be125c6..ba232e9 100644 --- a/libstdc++-v3/include/std/concepts +++ b/libstdc++-v3/include/std/concepts @@ -297,16 +297,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __detail::__cref<_Up>>> && __detail::__weakly_eq_cmp_with<_Tp, _Up>; + namespace __detail + { + template<typename _Tp, typename _Up> + concept __partially_ordered_with + = requires(const remove_reference_t<_Tp>& __t, + const remove_reference_t<_Up>& __u) { + { __t < __u } -> __boolean_testable; + { __t > __u } -> __boolean_testable; + { __t <= __u } -> __boolean_testable; + { __t >= __u } -> __boolean_testable; + { __u < __t } -> __boolean_testable; + { __u > __t } -> __boolean_testable; + { __u <= __t } -> __boolean_testable; + { __u >= __t } -> __boolean_testable; + }; + } // namespace __detail + // [concept.totallyordered], concept totally_ordered template<typename _Tp> concept totally_ordered = equality_comparable<_Tp> - && requires(__detail::__cref<_Tp> __a, __detail::__cref<_Tp> __b) { - { __a < __b } -> __detail::__boolean_testable; - { __a > __b } -> __detail::__boolean_testable; - { __a <= __b } -> __detail::__boolean_testable; - { __a >= __b } -> __detail::__boolean_testable; - }; + && __detail::__partially_ordered_with<_Tp, _Tp>; template<typename _Tp, typename _Up> concept totally_ordered_with @@ -314,16 +326,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION && equality_comparable_with<_Tp, _Up> && totally_ordered<common_reference_t<__detail::__cref<_Tp>, __detail::__cref<_Up>>> - && requires(__detail::__cref<_Tp> __t, __detail::__cref<_Up> __u) { - { __t < __u } -> __detail::__boolean_testable; - { __t > __u } -> __detail::__boolean_testable; - { __t <= __u } -> __detail::__boolean_testable; - { __t >= __u } -> __detail::__boolean_testable; - { __u < __t } -> __detail::__boolean_testable; - { __u > __t } -> __detail::__boolean_testable; - { __u <= __t } -> __detail::__boolean_testable; - { __u >= __t } -> __detail::__boolean_testable; - }; + && __detail::__partially_ordered_with<_Tp, _Up>; template<typename _Tp> concept regular = semiregular<_Tp> && equality_comparable<_Tp>; diff --git a/libstdc++-v3/libsupc++/compare b/libstdc++-v3/libsupc++/compare index ba7db31..a74ebc8 100644 --- a/libstdc++-v3/libsupc++/compare +++ b/libstdc++-v3/libsupc++/compare @@ -411,20 +411,6 @@ namespace std template<typename _Tp, typename _Cat> concept __compares_as = same_as<common_comparison_category_t<_Tp, _Cat>, _Cat>; - - template<typename _Tp, typename _Up> - concept __partially_ordered_with - = requires(const remove_reference_t<_Tp>& __t, - const remove_reference_t<_Up>& __u) { - { __t < __u } -> __boolean_testable; - { __t > __u } -> __boolean_testable; - { __t <= __u } -> __boolean_testable; - { __t >= __u } -> __boolean_testable; - { __u < __t } -> __boolean_testable; - { __u > __t } -> __boolean_testable; - { __u <= __t } -> __boolean_testable; - { __u >= __t } -> __boolean_testable; - }; } // namespace __detail // [cmp.concept], concept three_way_comparable |