[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