aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-02-19 21:40:03 +0000
committerJonathan Wakely <jwakely@redhat.com>2020-02-19 21:40:03 +0000
commit0294dc5f4eec5a07d70fac48f75c498c3b1a339b (patch)
tree60bf1841275438ef8d86f25753108a0488f78026
parent241ed965509ac931e9ae5f331d0294c1ee4ccd89 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--libstdc++-v3/include/std/concepts35
-rw-r--r--libstdc++-v3/libsupc++/compare14
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