forward_list::resize
take the object to be copied by value?Section: 23.3.7.5 [forward.list.modifiers] Status: C++11 Submitter: James McNellis Opened: 2010-07-16 Last modified: 2023-02-07
Priority: Not Prioritized
View all other issues in [forward.list.modifiers].
View all issues with C++11 status.
Discussion:
In
N3092
[forwardlist.modifiers], the resize()
member function is
declared as:
void resize(size_type sz, value_type c);
The other sequence containers (list
, deque
, and
vector
) take 'c'
by const reference.
Is there a reason for this difference? If not, then resize()
should
be declared as:
void resize(size_type sz, const value_type& c);
The declaration would need to be changed both at its declaration in the class definition at [forwardlist]/3 and where its behavior is specified at [forwardlist.modifiers]/22.
This would make forward_list
consistent with the CD1 issue 679.
[ Post-Rapperswil ]
Daniel changed the P/R slightly, because one paragraph number has been changed since the issue
had been submitted. He also added a similar Requires element that exists in all other containers with
a resize
member function. He deliberately did not touch the wrong usage of "default-constructed" because that
will be taken care of by LWG issue 868.
Moved to Tentatively Ready with revised wording after 5 positive votes on c++std-lib.
[ Adopted at 2010-11 Batavia ]
Proposed resolution:
forward_list
synopsis, as indicated:
... void resize(size_type sz); void resize(size_type sz, const value_type& c); void clear(); ...
void resize(size_type sz); void resize(size_type sz, const value_type& c);27 Effects: If
28 - Requires:sz < distance(begin(), end())
, erases the lastdistance(begin(), end()) - sz
elements from the list. Otherwise, insertssz - distance(begin(), end())
elements at the end of the list. For the first signature the inserted elements are default constructed, and for the second signature they are copies ofc
.T
shall beDefaultConstructible
for the first form and it shall beCopyConstructible
for the second form.