On 03/03/20 11:30 -0500, Patrick Palka wrote:
We are passing a value type as the first argument to is_nothrow_assignable_v,
but the result of that is always false.  Since this predicate is a part of the
condition that guards the corresponding optimizations for these algorithms, this
bug means these optimizations are never used.  We should be passing a reference
type to is_nothrow_assignable_v instead.

libstdc++-v3/ChangeLog:

        * include/bits/ranges_uninitialized.h
        (uninitialized_copy_fn::operator()): Pass a reference type as the first
        argument to is_nothrow_assignable_v.
        (uninitialized_copy_fn::operator()): Likewise.
        (uninitialized_move_fn::operator()): Likewise.  Return an in_out_result
        with the input iterator stripped of its move_iterator.
        (uninitialized_move_n_fn::operator()): Likewise.
        (uninitialized_fill_fn::operator()): Pass a reference type as the first
        argument to is_nothrow_assignable_v.
        (uninitialized_fill_n_fn::operator()): Likewise.

OK.

Reply via email to