diff options
author | Patrick Palka <ppalka@redhat.com> | 2020-09-21 20:48:17 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2020-09-21 20:48:17 -0400 |
commit | f017952d31ba8fa965106505bed5844cc1a63b4b (patch) | |
tree | 5ed5ce03354daa0c012c06149d582faa7cac834a | |
parent | 44135373fcdbe4019c5524ec3dff8e93d9ef113c (diff) | |
download | gcc-f017952d31ba8fa965106505bed5844cc1a63b4b.zip gcc-f017952d31ba8fa965106505bed5844cc1a63b4b.tar.gz gcc-f017952d31ba8fa965106505bed5844cc1a63b4b.tar.bz2 |
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.
-rw-r--r-- | libstdc++-v3/include/bits/stl_algo.h | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/25_algorithms/for_each/constexpr.cc | 12 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/25_algorithms/search/constexpr.cc | 4 |
3 files changed, 18 insertions, 0 deletions
diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h index 550a15f..a0b96c6 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<typename _InputIterator, typename _Size, typename _Function> + _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<typename _ForwardIterator, typename _Searcher> + _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 1bece35..b3aca23 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 ba9437e..e34194c 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<int>()); + const auto outtt2 + = std::search(ca0.begin(), ca0.end(), + std::default_searcher(cam.begin(), cam.end())); + return true; } |