Index: libcxx/include/algorithm =================================================================== --- libcxx/include/algorithm +++ libcxx/include/algorithm @@ -785,6 +785,7 @@ __debug_less(_Compare& __c) : __comp_(__c) {} template + _LIBCPP_CONSTEXPR_AFTER_CXX17 bool operator()(const _Tp& __x, const _Up& __y) { bool __r = __comp_(__x, __y); 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 @@ -268,6 +268,24 @@ assert(dl(static_cast(1), static_cast(2))); } +#if TEST_STD_VER > 17 +struct ConstexprComparator { + constexpr bool operator()(int const& lhs, int const& rhs) const { + return lhs < rhs; + } +}; + +void test_constexpr() { + auto compare = ConstexprComparator{}; + constexpr bool b1 = __debug_less{compare}(1, 2); + assert(b1); + constexpr int i1 = 1; + constexpr int i2 = 2; + constexpr bool b2 = __debug_less{compare}(i2, i1); + assert(!b2); +} +#endif + int main(int, char**) { test_passing(); test_failing(); @@ -275,5 +293,8 @@ test_non_const_arg_cmp(); test_value_iterator(); test_value_categories(); +#if TEST_STD_VER > 17 + test_constexpr(); +#endif return 0; }