make_move_iterator()
cannot be used to construct a move_iterator
for a
move-only iteratorSection: 24.5.4.9 [move.iter.nonmember] Status: C++20 Submitter: Patrick Palka Opened: 2020-02-07 Last modified: 2021-02-25
Priority: 0
View all other issues in [move.iter.nonmember].
View all issues with C++20 status.
Discussion:
P1207R4 ("Movability of single-pass iterators") introduces the notion of a move-only non-forward iterator and makes some changes to the existing specification to realize that support.
The problem is that the specification ofmake_move_iterator()
provided in
24.5.4.9 [move.iter.nonmember] p6 does attempt to construct a
move_iterator<Iterator>
with an lvalue of i
instead
of an rvalue, having the effect of copying it instead of moving it, thus preventing
to accept move-only iterators.
[2020-02 Prioritized as IMMEDIATE Monday morning in Prague]
Proposed resolution:
This wording is relative to N4849.
Modify 24.5.4.9 [move.iter.nonmember] as indicated:
template<class Iterator> constexpr move_iterator<Iterator> make_move_iterator(Iterator i);-6- Returns:
move_iterator<Iterator>(std::move(i))
.