[Bug libstdc++/64584] New: basic_regex::assign breaks *this if it throws regex_error

kariya_mitsuru at hotmail dot com gcc-bugzilla@gcc.gnu.org
Tue Jan 13 17:11:00 GMT 2015


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
===========================================================================



More information about the Gcc-bugs mailing list