@@ -675,12 +681,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION assign(const basic_string<_Ch_type, _Ch_typeraits, _Alloc>& __s, flag_type __flags = ECMAScript) { + auto __traits = _M_traits; + auto __f = _M_flags; _M_flags = __flags; - _M_original_str.assign(__s.begin(), __s.end()); - auto __p = _M_original_str.c_str(); - _M_automaton = __detail::__compile_nfa(__p, - __p + _M_original_str.size(), - _M_traits, _M_flags); + _M_traits = __traits;
What is this assignnment for?
+ __try + { + _M_automaton = __detail::__compile_nfa( + __s.data(), __s.data() + __s.size(), _M_traits, _M_flags); + _M_original_str = __s; + } + __catch (...) + { + _M_traits = __traits; + _M_flags = __f; + __throw_exception_again; + } return *this; } @@ -767,8 +786,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION swap(basic_regex& __rhs) { std::swap(_M_flags, __rhs._M_flags); - std::swap(_M_original_str, __rhs._M_original_str); - this->imbue(__rhs.imbue(this->getloc())); + std::swap(_M_traits, __rhs._M_traits); + auto tmp = std::move(_M_original_str);
Please rename this to __tmp to avoid user-defined macros.
+ this->assign(__rhs._M_original_str, _M_flags); + __rhs.assign(tmp, __rhs._M_flags); } #ifdef _GLIBCXX_DEBUG