[gcc(refs/users/ppalka/heads/libstdcxx-constrained-algos)] Handle empty ranges in ranges::search
Patrick Palka
ppalka@gcc.gnu.org
Fri Jan 17 21:43:00 GMT 2020
https://gcc.gnu.org/g:216cce106d7c508cff558f4e4a226db8354cdea8
commit 216cce106d7c508cff558f4e4a226db8354cdea8
Author: Patrick Palka <ppalka@gcc.gnu.org>
Date: Wed Jan 15 10:50:08 2020 -0500
Handle empty ranges in ranges::search
Diff:
---
libstdc++-v3/include/bits/ranges_algo.h | 3 +++
libstdc++-v3/testsuite/25_algorithms/search/constrained.cc | 6 ++++++
2 files changed, 9 insertions(+)
diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h
index e17f71d..36640dd 100644
--- a/libstdc++-v3/include/bits/ranges_algo.h
+++ b/libstdc++-v3/include/bits/ranges_algo.h
@@ -369,6 +369,9 @@ namespace ranges
search(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2,
_Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {})
{
+ if (__first1 == __last1 || __first2 == __last2)
+ return {__first1, __first1};
+
for (;;)
{
for (;;)
diff --git a/libstdc++-v3/testsuite/25_algorithms/search/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/search/constrained.cc
index 85987a5..314d9d2 100644
--- a/libstdc++-v3/testsuite/25_algorithms/search/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/search/constrained.cc
@@ -72,6 +72,12 @@ test02()
static_assert(std::get<0>(ranges::search(x, w, {}, &X::i)) == x+0);
static_assert(std::get<1>(ranges::search(x, w, {}, &X::i)) == x+1);
+
+ static_assert(std::get<0>(ranges::search(x, x+6, w, w, {}, &X::i)) == x+0);
+ static_assert(std::get<1>(ranges::search(x, x+6, w, w, {}, &X::i)) == x+0);
+
+ static_assert(std::get<0>(ranges::search(x, x, w, w+1, {}, &X::i)) == x+0);
+ static_assert(std::get<1>(ranges::search(x, x, w, w+1, {}, &X::i)) == x+0);
}
int
More information about the Libstdc++-cvs
mailing list