This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++17 status.
assign()
on iterators/pointers/referencesSection: 24.2.4 [sequence.reqmts] Status: C++17 Submitter: Tim Song Opened: 2016-04-25 Last modified: 2017-07-30
Priority: 0
View other active issues in [sequence.reqmts].
View all other issues in [sequence.reqmts].
View all issues with C++17 status.
Discussion:
The sequence container requirements table says nothing about the effect of assign()
on iterators,
pointers or references into the container. Before LWG 2209(i) (and LWG 320(i) for std::list
),
assign()
was specified as "erase everything then insert
", which implies wholesale invalidation from the
"erase everything" part. With that gone, the blanket "no invalidation" wording in
24.2.2 [container.requirements.general]/12 would seem to apply, which makes absolutely no sense.
[2016-05 Issues Telecon]
Proposed resolution:
This wording is relative to N4582.
In 24.2.4 [sequence.reqmts], edit Table 107 (Sequence container requirements) as indicated:
Table 107 — Sequence container requirements (in addition to container) Expression Return type Assertion/note
pre-/post-condition[…]
a.assign(i, j)
void
Requires: T
shall beEmplaceConstructible
intoX
from*i
and assignable from*i
.
Forvector
, if the iterator does not meet the forward iterator requirements (24.2.5),
T
shall also beMoveInsertable
intoX
.
Each iterator in the range[i, j)
shall be dereferenced exactly once.
pre:i
,j
are not iterators intoa
.
Replaces elements ina
with a copy of[i, j)
.
Invalidates all references, pointers and iterators referring to the elements ofa
.
Forvector
anddeque
, also invalidates the past-the-end iterator.[…]
a.assign(n, t)
void
Requires: T
shall beCopyInsertable
intoX
andCopyAssignable
.
pre:t
is not a reference intoa
.
Replaces elements ina
withn
copies oft
.
Invalidates all references, pointers and iterators referring to the elements ofa
.
Forvector
anddeque
, also invalidates the past-the-end iterator.