basic_regex
should be moveableSection: 28.6.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 28.6.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 28.6.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 28.6.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 frome
.Postconditions:
flags()
andmark_count()
returne.flags()
ande.mark_count()
, respectively, thate
had before construction, leavinge
in a valid state with an unspecified value.Throws: nothing.
Also in 28.6.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 28.6.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 fromrhs
and returns*this
.Postconditions:
flags()
andmark_count()
returnrhs.flags()
andrhs.mark_count()
, respectively, thatrhs
had before assignment, leavingrhs
in a valid state with an unspecified value.Throws: nothing.