diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-10-18 12:27:26 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-10-18 12:27:26 +0100 |
commit | 7e4b7d7bacd750628a99a42237e75810a4359b74 (patch) | |
tree | 244f251cddcf46e1f4f9d40a7d5504b8a15ef911 /libstdc++-v3/include | |
parent | bec3c279a86d951003452727bca933e4fa7731ca (diff) | |
download | gcc-7e4b7d7bacd750628a99a42237e75810a4359b74.tar.gz |
Implement std::ranges::less without std::less
* include/bits/range_cmp.h (ranges::less::operator()): Inline the
logic from std::less::operator() to remove the dependency on it.
From-SVN: r277150
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r-- | libstdc++-v3/include/bits/range_cmp.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/libstdc++-v3/include/bits/range_cmp.h b/libstdc++-v3/include/bits/range_cmp.h index 3e5bb8847ab..a77fd5274b9 100644 --- a/libstdc++-v3/include/bits/range_cmp.h +++ b/libstdc++-v3/include/bits/range_cmp.h @@ -121,10 +121,19 @@ namespace ranges noexcept(noexcept(std::declval<_Tp>() < std::declval<_Up>())) { if constexpr (__detail::__less_builtin_ptr_cmp<_Tp, _Up>) - return std::less<const volatile void*>{}( - static_cast<const volatile void*>(std::forward<_Tp>(__t)), + { +#ifdef __cpp_lib_is_constant_evaluated + if (std::is_constant_evaluated()) + return __t < __u; +#endif + auto __x = reinterpret_cast<__UINTPTR_TYPE__>( + static_cast<const volatile void*>(std::forward<_Tp>(__t))); + auto __y = reinterpret_cast<__UINTPTR_TYPE__>( static_cast<const volatile void*>(std::forward<_Up>(__u))); - return std::forward<_Tp>(__t) < std::forward<_Up>(__u); + return __x < __y; + } + else + return std::forward<_Tp>(__t) < std::forward<_Up>(__u); } using is_transparent = __is_transparent; |