This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of NAD status.
operator= or assign?Section: 27.4.3.3 [string.cons], 27.4.3.7.3 [string.assign], 28.6.7.3 [re.regex.assign] Status: NAD Submitter: Marshall Clow Opened: 2016-01-05 Last modified: 2016-11-12
Priority: 4
View all other issues in [string.cons].
View all issues with NAD status.
Discussion:
There are two "containers" in the standard who have member functions named assign that take parameters of the 
type of the container (as opposed to iterators, pointers, what have you).
string's case, we define assign in terms of operator=.
In regex's case, we define operator= in terms of assign.
We should pick a style and use use it.
In 27.4.3.3 [string.cons], we have:
basic_string& operator=(const basic_string& str);-17- Effects: If
-18- If*thisandstrare not the same object, modifies*thisas shown in Table 70.*thisandstrare the same object, the member has no effect. -19- Returns:*thisbasic_string& operator=(basic_string&& str) noexcept(allocator_traits<Allocator>::propagate_on_container_move_assignment::value || allocator_traits<Allocator>::is_always_equal::value);-20- Effects: Move assigns as a sequence container (23.2), except that iterators, pointers and references may be invalidated.
-21- Returns:*this
In 27.4.3.7.3 [string.assign], we have:
basic_string& assign(const basic_string& str);-1- Effects: Equivalent to
-2- Returns:assign(str, 0, npos).*this.basic_string& assign(basic_string&& str) noexcept(allocator_traits<Allocator>::propagate_on_container_move_assignment::value || allocator_traits<Allocator>::is_always_equal::value);-2- Effects: Equivalent to
-3- Returns:*this = std::move(str).*this.
Marshall says: There is another issue 2579(i) here, to change /1 to be similar to /2.
In 28.6.7.3 [re.regex.assign], we have:basic_regex& operator=(const basic_regex& e);-1- Effects: returns
assign(e).basic_regex& operator=(basic_regex&& e) noexcept;-2- Effects: returns
assign(std::move(e)).
and
basic_regex& assign(const basic_regex& that);-7- Effects: copies
-8- Postconditions:thatinto*thisand returns*this.flags()andmark_count()returnthat.flags()andthat.mark_count(), respectively.basic_regex& assign(basic_regex&& that) noexcept;-9- Effects: move assigns from
-10- Postconditions:thatinto*thisand returns*this.flags()andmark_count()return the values thatthat.flags()andthat.mark_count(), respectively, had before assignment.thatis in a valid state with unspecified value.
[2016-02, Issues Telecon]
Marshall to see if this can be dealt with editorially. Change Regex so that assign is in terms of op=
[2016-02]
Changed basic_regex to match string as an editorial change. Closing as NAD
Proposed resolution: