[PATCH 4/4] libstdc++: Move-only input iterator support in <memory> algorithms (LWG 3355)
Jonathan Wakely
jwakely@redhat.com
Tue Mar 3 21:38:00 GMT 2020
On 03/03/20 11:30 -0500, Patrick Palka wrote:
>This adds support for move-only input iterators in the ranges::unitialized_*
>algorithms defined in <memory>, as per LWG 3355. The only changes needed are to
>add calls to std::move in the appropriate places and to use operator-() instead
>of ranges::distance() because the latter cannot be used with a move-only
>iterator with a sized sentinel as is the case here. (This issue with
>ranges::distance is LWG 3392.)
>
>libstdc++-v3/ChangeLog:
>
> LWG 3355 The memory algorithms should support move-only input iterators
> introduced by P1207
> * include/bits/ranges_uninitialized.h
> (__uninitialized_copy_fn::operator()): Use std::move to avoid attempting
> to copy __ifirst, which could be a move-only input iterator. Use
> operator- instead of ranges::distance to compute distance from a sized
> sentinel.
> (__uninitialized_copy_n_fn::operator()): Likewise.
> (__uninitialized_move_fn::operator()): Likewise.
> (__uninitialized_move_n_fn::operator()): Likewise.
> (__uninitialized_destroy_fn::operator()): Use std::move to avoid
> attempting to copy __first.
> (__uninitialized_destroy_n_fn::operator()): Likewise.
> * testsuite/20_util/specialized_algorithms/destroy/constrained.cc:
> Augment test.
> * .../specialized_algorithms/uninitialized_copy/constrained.cc:
> Likewise.
> * .../specialized_algorithms/uninitialized_move/constrained.cc:
> Likewise.
OK, thanks.
More information about the Libstdc++
mailing list