[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