From a12cb9d211019d99b5875b6d8034617cbc24c2cc Mon Sep 17 00:00:00 2001 From: Thomas Anderson Date: Fri, 19 Apr 2019 00:52:54 +0000 Subject: [PATCH] [libc++] Make __debug_less::operator() constexpr This is a followup to [1] which added a new `__debug_less::operator()` overload. [2] added `_LIBCPP_CONSTEXPR_AFTER_CXX17` to the original `__debug_less::operator()` between the time of writing [1] and landing it. This change adds `_LIBCPP_CONSTEXPR_AFTER_CXX17` to the new overload too. [1] https://reviews.llvm.org/rL358423 [2] https://reviews.llvm.org/rL358252 Differential Revision: https://reviews.llvm.org/D60724 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@358725 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/algorithm | 1 + test/libcxx/algorithms/debug_less.pass.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/algorithm b/include/algorithm index 244ae2d5b..326e566fb 100644 --- a/include/algorithm +++ b/include/algorithm @@ -785,6 +785,7 @@ struct __debug_less __debug_less(_Compare& __c) : __comp_(__c) {} template + _LIBCPP_CONSTEXPR_AFTER_CXX17 bool operator()(const _Tp& __x, const _Up& __y) { bool __r = __comp_(__x, __y); diff --git a/test/libcxx/algorithms/debug_less.pass.cpp b/test/libcxx/algorithms/debug_less.pass.cpp index 260900b7d..5d1b575b5 100644 --- a/test/libcxx/algorithms/debug_less.pass.cpp +++ b/test/libcxx/algorithms/debug_less.pass.cpp @@ -268,6 +268,16 @@ void test_value_categories() { assert(dl(static_cast(1), static_cast(2))); } +#if TEST_STD_VER > 17 +constexpr bool test_constexpr() { + std::less<> cmp{}; + __debug_less > dcmp(cmp); + assert(dcmp(1, 2)); + assert(!dcmp(1, 1)); + return true; +} +#endif + int main(int, char**) { test_passing(); test_failing(); @@ -275,5 +285,8 @@ int main(int, char**) { test_non_const_arg_cmp(); test_value_iterator(); test_value_categories(); +#if TEST_STD_VER > 17 + static_assert(test_constexpr(), ""); +#endif return 0; }