summaryrefslogtreecommitdiff
path: root/libstdc++-v3/include
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-10-18 12:27:26 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2019-10-18 12:27:26 +0100
commit7e4b7d7bacd750628a99a42237e75810a4359b74 (patch)
tree244f251cddcf46e1f4f9d40a7d5504b8a15ef911 /libstdc++-v3/include
parentbec3c279a86d951003452727bca933e4fa7731ca (diff)
downloadgcc-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.h15
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;