From f017952d31ba8fa965106505bed5844cc1a63b4b Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Mon, 21 Sep 2020 20:48:17 -0400 Subject: [PATCH] libstdc++: Mark some more algorithms constexpr for C++20 As per P0202. libstdc++-v3/ChangeLog: * include/bits/stl_algo.h (for_each_n): Mark constexpr for C++20. (search): Likewise for the overload that takes a searcher. * testsuite/25_algorithms/for_each/constexpr.cc: Test constexpr std::for_each_n. * testsuite/25_algorithms/search/constexpr.cc: Test constexpr std::search overload that takes a searcher. --- libstdc++-v3/include/bits/stl_algo.h | 2 ++ .../testsuite/25_algorithms/for_each/constexpr.cc | 12 ++++++++++++ .../testsuite/25_algorithms/search/constexpr.cc | 4 ++++ 3 files changed, 18 insertions(+) diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h index 550a15f2b3b..a0b96c61798 100644 --- a/libstdc++-v3/include/bits/stl_algo.h +++ b/libstdc++-v3/include/bits/stl_algo.h @@ -3832,6 +3832,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * If `__f` has a return value it is ignored. */ template + _GLIBCXX20_CONSTEXPR _InputIterator for_each_n(_InputIterator __first, _Size __n, _Function __f) { @@ -4251,6 +4252,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * @return @p __searcher(__first,__last).first */ template + _GLIBCXX20_CONSTEXPR inline _ForwardIterator search(_ForwardIterator __first, _ForwardIterator __last, const _Searcher& __searcher) diff --git a/libstdc++-v3/testsuite/25_algorithms/for_each/constexpr.cc b/libstdc++-v3/testsuite/25_algorithms/for_each/constexpr.cc index 1bece35a0d9..b3aca23eccc 100644 --- a/libstdc++-v3/testsuite/25_algorithms/for_each/constexpr.cc +++ b/libstdc++-v3/testsuite/25_algorithms/for_each/constexpr.cc @@ -34,3 +34,15 @@ test() } static_assert(test()); + +constexpr bool +test_n() +{ + int tot = 0; + auto sum = [&total = tot](int i){ total += i; }; + auto sum2 = std::for_each_n(ca0.begin(), std::size(ca0)-1, sum); + + return tot == 55; +} + +static_assert(test_n()); diff --git a/libstdc++-v3/testsuite/25_algorithms/search/constexpr.cc b/libstdc++-v3/testsuite/25_algorithms/search/constexpr.cc index ba9437eced7..e34194cfc5d 100644 --- a/libstdc++-v3/testsuite/25_algorithms/search/constexpr.cc +++ b/libstdc++-v3/testsuite/25_algorithms/search/constexpr.cc @@ -31,6 +31,10 @@ test() cam.begin(), cam.end(), std::equal_to()); + const auto outtt2 + = std::search(ca0.begin(), ca0.end(), + std::default_searcher(cam.begin(), cam.end())); + return true; } -- 2.30.2