[gcc(refs/users/ppalka/heads/libstdcxx-constrained-algos)] std::move() input_iterators and output_iterators when necessary

Patrick Palka ppalka@gcc.gnu.org
Wed Jan 22 18:45:00 GMT 2020


https://gcc.gnu.org/g:1924aae1bfedbb4fa5bb6ecdd29e2cc4ddddcd1c

commit 1924aae1bfedbb4fa5bb6ecdd29e2cc4ddddcd1c
Author: Patrick Palka <ppalka@redhat.com>
Date:   Wed Jan 22 13:42:13 2020 -0500

    std::move() input_iterators and output_iterators when necessary

Diff:
---
 libstdc++-v3/include/bits/ranges_algo.h | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h
index 3fa945d..7cc83b1 100644
--- a/libstdc++-v3/include/bits/ranges_algo.h
+++ b/libstdc++-v3/include/bits/ranges_algo.h
@@ -138,7 +138,7 @@ namespace ranges
     {
       for (; __first != __last; ++__first)
 	std::__invoke(__f, std::__invoke(__proj, *__first));
-      return { __first, std::move(__f) };
+      return { std::move(__first), std::move(__f) };
     }
 
   template<input_range _Range, typename _Proj = identity,
@@ -342,7 +342,7 @@ namespace ranges
 	++__first1;
 	++__first2;
       }
-      return { __first1, __first2 };
+      return { std::move(__first1), std::move(__first2) };
     }
 
   template<input_range _Range1, input_range _Range2,
@@ -767,10 +767,10 @@ namespace ranges
     equal(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2,
 	  _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {})
     {
-      return ranges::__equal(std::__niter_base(__first1),
-			     std::__niter_base(__last1),
-			     std::__niter_base(__first2),
-			     std::__niter_base(__last2),
+      return ranges::__equal(std::__niter_base(std::move(__first1)),
+			     std::__niter_base(std::move(__last1)),
+			     std::__niter_base(std::move(__first2)),
+			     std::__niter_base(std::move(__last2)),
 			     std::move(__pred),
 			     std::move(__proj1), std::move(__proj2));
     }
@@ -982,7 +982,7 @@ namespace ranges
     {
       for (; __first1 != __last1; ++__first1, (void)++__result)
 	*__result = std::__invoke(__op, std::__invoke(__proj, *__first1));
-      return {__first1, __result};
+      return {std::move(__first1), __result};
     }
 
   template<input_range _Range, weakly_incrementable _Out,
@@ -1037,7 +1037,7 @@ namespace ranges
 	*__result = std::__invoke(__binary_op,
 				  std::__invoke(__proj1, *__first1),
 				  std::__invoke(__proj2, *__first2));
-      return {__first1, __first2, __result};
+      return {std::move(__first1), std::move(__first2), __result};
     }
 
   template<input_range _Range1, input_range _Range2,
@@ -1101,7 +1101,7 @@ namespace ranges
       for (; __first != __last; ++__first)
 	if (std::__invoke(__pred, std::__invoke(__proj, *__first)))
 	  *__first = __new_value;
-      return __first;
+      return std::move(__first);
     }
 
   template<input_range _Range, typename _Tp, typename _Proj = identity,
@@ -1457,7 +1457,7 @@ namespace ranges
 		_Comp __comp = {}, _Proj __proj = {})
     {
       if (__first == __last)
-	return {__first, __result};
+	return {std::move(__first), std::move(__result)};
 
       // TODO: perform a closer comparison with reference implementations
       if constexpr (forward_iterator<_Iter>)
@@ -1472,7 +1472,7 @@ namespace ranges
 		__first = __next;
 		*++__result = *__first;
 	      }
-	  return {__next, ++__result};
+	  return {__next, std::move(++__result)};
 	}
       else if constexpr (input_iterator<_Out>
 			 && same_as<iter_value_t<_Iter>, iter_value_t<_Out>>)
@@ -1483,7 +1483,7 @@ namespace ranges
 			       std::__invoke(__proj, *__result),
 			       std::__invoke(__proj, *__first)))
 		*++__result = *__first;
-	  return {__first, ++__result};
+	  return {std::move(__first), std::move(++__result)};
 	}
       else // indirectly_copyable_storable<_Iter, _Out>
 	{
@@ -1499,7 +1499,7 @@ namespace ranges
 		  *++__result = __value;
 		}
 	    }
-	  return {__first, ++__result};
+	  return {std::move(__first), std::move(++__result)};
 	}
     }



More information about the Libstdc++-cvs mailing list