summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/algorithms/alg.nonmodifying/alg.count/count_if.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libcxx/test/std/algorithms/alg.nonmodifying/alg.count/count_if.pass.cpp')
-rw-r--r--libcxx/test/std/algorithms/alg.nonmodifying/alg.count/count_if.pass.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/libcxx/test/std/algorithms/alg.nonmodifying/alg.count/count_if.pass.cpp b/libcxx/test/std/algorithms/alg.nonmodifying/alg.count/count_if.pass.cpp
index b837a0e514c..ff3b6888aa0 100644
--- a/libcxx/test/std/algorithms/alg.nonmodifying/alg.count/count_if.pass.cpp
+++ b/libcxx/test/std/algorithms/alg.nonmodifying/alg.count/count_if.pass.cpp
@@ -11,21 +11,31 @@
// template<InputIterator Iter, Predicate<auto, Iter::value_type> Pred>
// requires CopyConstructible<Pred>
-// Iter::difference_type
+// constexpr Iter::difference_type // constexpr after C++17
// count_if(Iter first, Iter last, Pred pred);
#include <algorithm>
#include <functional>
#include <cassert>
+#include "test_macros.h"
#include "test_iterators.h"
struct eq {
- eq (int val) : v(val) {}
- bool operator () (int v2) const { return v == v2; }
+ TEST_CONSTEXPR eq (int val) : v(val) {}
+ TEST_CONSTEXPR bool operator () (int v2) const { return v == v2; }
int v;
};
+#if TEST_STD_VER > 17
+TEST_CONSTEXPR bool test_constexpr() {
+ int ia[] = {0, 1, 2, 2, 0, 1, 2, 3};
+ int ib[] = {1, 2, 3, 4, 5, 6};
+ return (std::count_if(std::begin(ia), std::end(ia), eq(2)) == 3)
+ && (std::count_if(std::begin(ib), std::end(ib), eq(9)) == 0)
+ ;
+ }
+#endif
int main()
{
@@ -40,4 +50,8 @@ int main()
assert(std::count_if(input_iterator<const int*>(ia),
input_iterator<const int*>(ia),
eq(2)) == 0);
+
+#if TEST_STD_VER > 17
+ static_assert(test_constexpr());
+#endif
}
OpenPOWER on IntegriCloud