[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
This commit is contained in:
Thomas Anderson
2019-04-19 00:52:54 +00:00
parent aa15214168
commit a12cb9d211
2 changed files with 14 additions and 0 deletions

View File

@@ -785,6 +785,7 @@ struct __debug_less
__debug_less(_Compare& __c) : __comp_(__c) {} __debug_less(_Compare& __c) : __comp_(__c) {}
template <class _Tp, class _Up> template <class _Tp, class _Up>
_LIBCPP_CONSTEXPR_AFTER_CXX17
bool operator()(const _Tp& __x, const _Up& __y) bool operator()(const _Tp& __x, const _Up& __y)
{ {
bool __r = __comp_(__x, __y); bool __r = __comp_(__x, __y);

View File

@@ -268,6 +268,16 @@ void test_value_categories() {
assert(dl(static_cast<int&&>(1), static_cast<const int&&>(2))); assert(dl(static_cast<int&&>(1), static_cast<const int&&>(2)));
} }
#if TEST_STD_VER > 17
constexpr bool test_constexpr() {
std::less<> cmp{};
__debug_less<std::less<> > dcmp(cmp);
assert(dcmp(1, 2));
assert(!dcmp(1, 1));
return true;
}
#endif
int main(int, char**) { int main(int, char**) {
test_passing(); test_passing();
test_failing(); test_failing();
@@ -275,5 +285,8 @@ int main(int, char**) {
test_non_const_arg_cmp(); test_non_const_arg_cmp();
test_value_iterator(); test_value_iterator();
test_value_categories(); test_value_categories();
#if TEST_STD_VER > 17
static_assert(test_constexpr(), "");
#endif
return 0; return 0;
} }