[gcc(refs/users/ppalka/heads/libstdcxx-constrained-algos)] Make ranges::swap_ranges move-only-safe

Patrick Palka ppalka@gcc.gnu.org
Wed Jan 22 23:02:00 GMT 2020


https://gcc.gnu.org/g:586820dbe44d1dab67193167da799fd3786e38d4

commit 586820dbe44d1dab67193167da799fd3786e38d4
Author: Patrick Palka <ppalka@redhat.com>
Date:   Wed Jan 22 18:01:01 2020 -0500

    Make ranges::swap_ranges move-only-safe

Diff:
---
 libstdc++-v3/include/bits/ranges_algo.h                        |  2 +-
 .../testsuite/25_algorithms/swap_ranges/constrained.cc         | 10 ++++++----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h
index 07e957d..2102f8a 100644
--- a/libstdc++-v3/include/bits/ranges_algo.h
+++ b/libstdc++-v3/include/bits/ranges_algo.h
@@ -956,7 +956,7 @@ namespace ranges
       for (; __first1 != __last1 && __first2 != __last2;
 	   ++__first1, (void)++__first2)
 	ranges::iter_swap(__first1, __first2);
-      return {__first1, __first2};
+      return {std::move(__first1), std::move(__first2)};
     }
 
   template<input_range _Range1, input_range _Range2>
diff --git a/libstdc++-v3/testsuite/25_algorithms/swap_ranges/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/swap_ranges/constrained.cc
index c44c97d..338b6a4 100644
--- a/libstdc++-v3/testsuite/25_algorithms/swap_ranges/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/swap_ranges/constrained.cc
@@ -78,8 +78,9 @@ test01()
       int w[3] = { 2, 4, 6 };
       test_container<int, forward_iterator_wrapper> cx(x);
       test_container<int, forward_iterator_wrapper> cy(y);
-      auto [x_iter, y_iter] = ranges::swap_ranges(x, y);
-      VERIFY( ranges::equal(y, y+3, z, z+3) && x_iter == x+3 && y_iter == y+3 );
+      auto [x_iter, y_iter] = ranges::swap_ranges(cx, cy);
+      VERIFY( ranges::equal(y, y+3, z, z+3) );
+      VERIFY( x_iter.ptr == x+3 && y_iter.ptr == y+3 );
       VERIFY( y[3] == 0 );
       VERIFY( ranges::equal(x, w) );
     }
@@ -91,8 +92,9 @@ test01()
       int w[3] = { 2, 4, 6 };
       test_range<int, input_iterator_wrapper> cx(x);
       test_range<int, input_iterator_wrapper> cy(y);
-      auto [y_iter, x_iter] = ranges::swap_ranges(y, x);
-      VERIFY( ranges::equal(y, y+3, z, z+3) && x_iter == x+3 && y_iter == y+3 );
+      auto [y_iter, x_iter] = ranges::swap_ranges(cy, cx);
+      VERIFY( ranges::equal(y, y+3, z, z+3) );
+      VERIFY( x_iter.ptr == x+3 && y_iter.ptr == y+3 );
       VERIFY( y[3] == 0 );
       VERIFY( ranges::equal(x, w) );
     }



More information about the Libstdc++-cvs mailing list