This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++11 status.
Section: 32.7 [re.regex] Status: C++11 Submitter: Daniel Krügler Opened: 2007-08-29 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [re.regex].
View all issues with C++11 status.
Discussion:
Addresses UK 316
According to the current state of the standard draft, the class template basic_regex, as described in 32.7 [re.regex]/3, is neither MoveConstructible nor MoveAssignable. IMO it should be, because typical regex state machines tend to have a rather large data quantum and I have seen several use cases, where a factory function returns regex values, which would take advantage of moveabilities.
[ Sophia Antipolis: ]
Needs wording for the semantics, the idea is agreed upon.
[ Post Summit Daniel updated wording to reflect new "swap rules". ]
[ 2009-07 Frankfurt: ]
Move to Ready.
Proposed resolution:
In the class definition of basic_regex, just below 32.7 [re.regex]/3, perform the following changes:
Just after basic_regex(const basic_regex&); insert:
basic_regex(basic_regex&&);
Just after basic_regex& operator=(const basic_regex&); insert:
basic_regex& operator=(basic_regex&&);
Just after basic_regex& assign(const basic_regex& that); insert:
basic_regex& assign(basic_regex&& that);
In 32.7.2 [re.regex.construct], just after p.11 add the following new member definition:
basic_regex(basic_regex&& e);Effects: Move-constructs a basic_regex instance from e.
Postconditions: flags() and mark_count() return e.flags() and e.mark_count(), respectively, that e had before construction, leaving e in a valid state with an unspecified value.
Throws: nothing.
Also in 32.7.2 [re.regex.construct], just after p.18 add the following new member definition:
basic_regex& operator=(basic_regex&& e);Effects: Returns the result of assign(std::move(e)).
In 32.7.3 [re.regex.assign], just after p. 2 add the following new member definition:
basic_regex& assign(basic_regex&& rhs);Effects: Move-assigns a basic_regex instance from rhs and returns *this.
Postconditions: flags() and mark_count() return rhs.flags() and rhs.mark_count(), respectively, that rhs had before assignment, leaving rhs in a valid state with an unspecified value.
Throws: nothing.