[libcxx-commits] [PATCH] D118940: [libc++] Fix std::__debug_less in c++17.
Jordan Rupprecht via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Feb 3 12:40:35 PST 2022
rupprecht created this revision.
rupprecht requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added subscribers: libcxx-commits, sstefan1.
Herald added a project: libc++.
Herald added a reviewer: libc++.
b07b5bd72716625e0976a84d23652d94d8d0165a <https://reviews.llvm.org/rGb07b5bd72716625e0976a84d23652d94d8d0165a> adds a use of `__comp_ref_type.h` to `std::min`. When libc++ is built with `-D_LIBCPP_DEBUG=0`, this enables `std::__debug_less`, which is only marked constexpr after c++17.
`std::min` itself is marked as being `constexpr` as of c++14, so by extension, `std::__debug_less` should also be marked `constexpr` for the same versions so that `std::min` can use it. This change lowers the guard from `> 17` to `> 11`.
Reproducer in godbolt: https://godbolt.org/z/ans3TGsj8
constexpr int x() { return std::min<int>({1, 2, 3, 4}); }
static_assert(x() == 1);
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D118940
Files:
libcxx/include/__algorithm/comp_ref_type.h
libcxx/test/libcxx/algorithms/debug_less.pass.cpp
Index: libcxx/test/libcxx/algorithms/debug_less.pass.cpp
===================================================================
--- libcxx/test/libcxx/algorithms/debug_less.pass.cpp
+++ libcxx/test/libcxx/algorithms/debug_less.pass.cpp
@@ -270,7 +270,7 @@
assert(dl(static_cast<int&&>(1), static_cast<const int&&>(2)));
}
-#if TEST_STD_VER > 17
+#if TEST_STD_VER > 11
constexpr bool test_constexpr() {
std::less<> cmp{};
__debug_less<std::less<> > dcmp(cmp);
@@ -287,7 +287,7 @@
test_non_const_arg_cmp();
test_value_iterator();
test_value_categories();
-#if TEST_STD_VER > 17
+#if TEST_STD_VER > 11
static_assert(test_constexpr(), "");
#endif
return 0;
Index: libcxx/include/__algorithm/comp_ref_type.h
===================================================================
--- libcxx/include/__algorithm/comp_ref_type.h
+++ libcxx/include/__algorithm/comp_ref_type.h
@@ -28,11 +28,11 @@
struct __debug_less
{
_Compare &__comp_;
- _LIBCPP_CONSTEXPR_AFTER_CXX17
+ _LIBCPP_CONSTEXPR_AFTER_CXX11
__debug_less(_Compare& __c) : __comp_(__c) {}
template <class _Tp, class _Up>
- _LIBCPP_CONSTEXPR_AFTER_CXX17
+ _LIBCPP_CONSTEXPR_AFTER_CXX11
bool operator()(const _Tp& __x, const _Up& __y)
{
bool __r = __comp_(__x, __y);
@@ -42,7 +42,7 @@
}
template <class _Tp, class _Up>
- _LIBCPP_CONSTEXPR_AFTER_CXX17
+ _LIBCPP_CONSTEXPR_AFTER_CXX11
bool operator()(_Tp& __x, _Up& __y)
{
bool __r = __comp_(__x, __y);
@@ -52,7 +52,7 @@
}
template <class _LHS, class _RHS>
- _LIBCPP_CONSTEXPR_AFTER_CXX17
+ _LIBCPP_CONSTEXPR_AFTER_CXX11
inline _LIBCPP_INLINE_VISIBILITY
decltype((void)declval<_Compare&>()(
declval<_LHS &>(), declval<_RHS &>()))
@@ -62,7 +62,7 @@
}
template <class _LHS, class _RHS>
- _LIBCPP_CONSTEXPR_AFTER_CXX17
+ _LIBCPP_CONSTEXPR_AFTER_CXX11
inline _LIBCPP_INLINE_VISIBILITY
void __do_compare_assert(long, _LHS &, _RHS &) {}
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D118940.405750.patch
Type: text/x-patch
Size: 2024 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20220203/efe72ac8/attachment.bin>
More information about the libcxx-commits
mailing list