Title
Container effects use "the assignment operator or move assignment operator"
Status
new
Section
[deque.modifiers] [vector.modifiers] [inplace.vector.modifiers]
Submitter
Jonathan Wakely

Created on 2024-07-25.00:00:00 last changed 1 month ago

Messages

Date: 2024-08-15.00:00:00

[ 2024-08-02; Reflector poll ]

Set priority to 3 after reflector poll. Arthur to draft wording.

Date: 2024-07-25.00:00:00

The spec for `deque::erase` talks about a exception "thrown by the assignment operator of `T`" but it's unclear which assignment operator this means. Arguably, this is fine because it means "the assignment operator that is used when repositioning the remaining elements". However, `deque::append_range`, `vector::append_range`, `vector::erase`, `inplace_vector::append_range`, and `inplace_vector::erase` talk about "the assignment operator or move assignment operator" which is just odd. In C++03 this just said "the assignment operator" and move semantics added "or the move assignment operator" but we could improve it.

What we should talk about is "an assignment operator", or "the assignment operator selected by overload resolution for the assignment expressions performed by the operation", or something like that.

This is potentially a bigger issue than just assignment: for `append_range` we say "If an exception is thrown other than by the copy constructor, move constructor, assignment operator, or move assignment operator [...]" and there's no guarantee that the constructor used for initializing a Cpp17CopyInsertable type is a copy constructor or move constructor. It could be some templated constructor that is a better match than any of the special member functions.

History
Date User Action Args
2024-08-02 21:52:03adminsetmessages: + msg14295
2024-07-25 00:00:00admincreate