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.


Reply via email to