move_iterator::operator[]
has wrong return typeSection: 24.5.4.6 [move.iter.elem] Status: C++11 Submitter: Doug Gregor Opened: 2008-08-21 Last modified: 2021-06-06
Priority: Not Prioritized
View all other issues in [move.iter.elem].
View all issues with C++11 status.
Discussion:
move_iterator
's operator[]
is declared as:
reference operator[](difference_type n) const;
This has the same problem that reverse_iterator
's operator[]
used to
have: if the underlying iterator's operator[]
returns a proxy, the
implicit conversion to value_type&&
could end up referencing a temporary
that has already been destroyed. This is essentially the same issue that
we dealt with for reverse_iterator
in DR 386.
[ 2009-07-28 Reopened by Alisdair. No longer solved by concepts. ]
[ 2009-08-15 Howard adds: ]
I recommend closing this as a duplicate of 1051 which addresses this issue for both
move_iterator
andreverse_iterator
.
[ 2009-10 Santa Cruz: ]
Move to Ready. Note that if 1051 is reopened, it may yield a better resolution, but 1051 is currently marked NAD.
Proposed resolution:
In 24.5.4.2 [move.iterator] and [move.iter.op.index], change the declaration of
move_iterator
's operator[]
to:
referenceunspecified operator[](difference_type n) const;
Rationale:
[ San Francisco: ]
NAD Editorial, see N2777.