From: redi Date: Fri, 18 Oct 2019 11:27:26 +0000 (+0000) Subject: Implement std::ranges::less without std::less X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=091371545376f40319d2f32a39cb19669276cacf;p=thirdparty%2Fgcc.git 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@277150 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1aeeb880a69e..c37bbd05eb66 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2019-10-18 Jonathan Wakely + + * include/bits/range_cmp.h (ranges::less::operator()): Inline the + logic from std::less::operator() to remove the dependency on it. + 2019-10-17 Jonathan Wakely * doc/doxygen/user.cfg.in (INPUT): Add new C++17 and C++20 headers. diff --git a/libstdc++-v3/include/bits/range_cmp.h b/libstdc++-v3/include/bits/range_cmp.h index 3e5bb8847ab4..a77fd5274b95 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{}( - static_cast(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(std::forward<_Tp>(__t))); + auto __y = reinterpret_cast<__UINTPTR_TYPE__>( static_cast(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;