[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