aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-04-20 17:50:10 +0100
committerJonathan Wakely <jwakely@redhat.com>2020-04-20 17:50:10 +0100
commit73a0a21d22da7db9687853a4ee7d55fc9aa818a4 (patch)
treeae76d269eadb19373fab026897dcdb97473ecfa3
parent93843da69772d271a7247ab2536280646086a5ce (diff)
downloadgcc-73a0a21d22da7db9687853a4ee7d55fc9aa818a4.zip
gcc-73a0a21d22da7db9687853a4ee7d55fc9aa818a4.tar.gz
gcc-73a0a21d22da7db9687853a4ee7d55fc9aa818a4.tar.bz2
libstdc++: Update __cpp_lib_three_way_comparison macro
With P1614R2 fully implemented (except for the <chrono> types which we don't support at all) we can define the feature test macro to the new value. * include/std/version (__cpp_lib_three_way_comparison): Update value. * libsupc++/compare (__cpp_lib_three_way_comparison): Likewise.
-rw-r--r--libstdc++-v3/ChangeLog3
-rw-r--r--libstdc++-v3/include/std/version2
-rw-r--r--libstdc++-v3/libsupc++/compare16
3 files changed, 18 insertions, 3 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 3d0ddf5..7e6a010a 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,8 @@
2020-04-20 Jonathan Wakely <jwakely@redhat.com>
+ * include/std/version (__cpp_lib_three_way_comparison): Update value.
+ * libsupc++/compare (__cpp_lib_three_way_comparison): Likewise.
+
* include/bits/stl_map.h (map): Define operator<=> and remove
operator< for C++20.
* include/bits/stl_multimap.h (multimap): Likewise.
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index d9a47ee..6d7dcc4 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -200,7 +200,7 @@
#endif
#define __cpp_lib_span 202002L
#if __cpp_impl_three_way_comparison >= 201907L && __cpp_lib_concepts
-# define __cpp_lib_three_way_comparison 201711L
+# define __cpp_lib_three_way_comparison 201907L
#endif
#define __cpp_lib_to_array 201907L
#endif
diff --git a/libstdc++-v3/libsupc++/compare b/libstdc++-v3/libsupc++/compare
index e5fb322..28dfe84 100644
--- a/libstdc++-v3/libsupc++/compare
+++ b/libstdc++-v3/libsupc++/compare
@@ -39,7 +39,7 @@
#include <concepts>
#if __cpp_lib_concepts
-# define __cpp_lib_three_way_comparison 201711L
+# define __cpp_lib_three_way_comparison 201907L
#endif
namespace std
@@ -866,12 +866,23 @@ namespace std
namespace __detail
{
- // [expos.only.func]
+ // [expos.only.func] synth-three-way
inline constexpr struct _Synth3way
{
template<typename _Tp, typename _Up>
+ static constexpr bool
+ _S_noexcept(const _Tp* __t = nullptr, const _Up* __u = nullptr)
+ {
+ if constexpr (three_way_comparable_with<_Tp, _Up>)
+ return noexcept(*__t <=> *__u);
+ else
+ return noexcept(*__t < *__u) && noexcept(*__u < *__t);
+ }
+
+ template<typename _Tp, typename _Up>
constexpr auto
operator()(const _Tp& __t, const _Up& __u) const
+ noexcept(_S_noexcept<_Tp, _Up>())
requires requires
{
{ __t < __u } -> __boolean_testable;
@@ -892,6 +903,7 @@ namespace std
}
} __synth3way = {};
+ // [expos.only.func] synth-three-way-result
template<typename _Tp, typename _Up = _Tp>
using __synth3way_t
= decltype(__detail::__synth3way(std::declval<_Tp&>(),