https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64680
Bug ID: 64680 Summary: basic_regex::operator= does not reset flags 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 34491 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=34491&action=edit g++ -v The sample code below should not throw a regex_error. ========================= sample code ========================= #include <regex> int main() { std::regex re("[[:alnum:]]", std::regex_constants::basic); re = "\\w+"; } =============================================================== cf. http://melpon.org/wandbox/permlink/lrD2Ia4urIPVgakK According to the C++11 standard 28.8.3[re.regex.assign], operator=(const charT* ptr) is equivalent to assign(ptr), and assign(ptr) calls assign(const char* ptr, flag_type f = regex_constants::ECMAScript). Since "\\w+" is a valid ECMAScript syntax, the sample code above should end normally.