Make regex::assign not clobber the regex in case of failure. Fixes PR#22213

llvm-svn: 225799
This commit is contained in:
Marshall Clow 2015-01-13 16:49:52 +00:00
parent e7cad7a1df
commit 9db9069cf3
2 changed files with 10 additions and 3 deletions

View File

@ -2599,9 +2599,7 @@ public:
assign(_ForwardIterator __first, _ForwardIterator __last,
flag_type __f = regex_constants::ECMAScript)
{
__member_init(__f);
__parse(__first, __last);
return *this;
return assign(basic_regex(__first, __last, __f));
}
#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS

View File

@ -23,4 +23,13 @@ int main()
r2.assign(r1);
assert(r2.flags() == std::regex::ECMAScript);
assert(r2.mark_count() == 2);
assert(std::regex_search("ab", r2));
bool caught = false;
try { r2.assign("(def", std::regex::extended); }
catch(std::regex_error &) { caught = true; }
assert(caught);
assert(r2.flags() == std::regex::ECMAScript);
assert(r2.mark_count() == 2);
assert(std::regex_search("ab", r2));
}