https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64584
Bug ID: 64584 Summary: basic_regex::assign breaks *this if it throws regex_error Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: kariya_mitsuru at hotmail dot com Created attachment 34436 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=34436&action=edit g++ -v Please see the following sample. =============================== sample code =============================== #include <iostream> #include <regex> int main() { std::regex re(""); std::cout << re.flags() << std::endl; try { re.assign("(", std::regex_constants::icase); } catch (const std::regex_error& e) { std::cout << e.code() << std::endl; } std::cout << re.flags() << std::endl; } =========================================================================== ================================= output ================================== 16 5 1 =========================================================================== cf. http://melpon.org/wandbox/permlink/tqxSS6MImnpsCGUf The C++11 standard 28.8.3[re.regex.assign]/p.15 says, "If an exception is thrown, *this is unchanged." So I think that the output should be ================================= output ================================== 16 5 16 ===========================================================================