Strange results when using C++11 regexp with gcc 4.8.2 (but works with Boost regexp)

Philipp Claßen picture Philipp Claßen · Nov 17, 2013 · Viewed 8.1k times · Source

I tried to use C++11's regular expression but failed even in trivial examples. From the outside, it seems to only compare the strings, for example:

std::regex_match(std::string{""}, std::regex{"a?"})   // false (???)
std::regex_match(std::string{"a?"}, std::regex{"a?"}) // true  (???)

In contrast, the Boost's regexp library behaves as I would have expected:

boost::regex_match(std::string{""}, boost::regex{"a?"})   // true  (OK)
boost::regex_match(std::string{"a?"}, boost::regex{"a?"}) // false (OK)

I tested with GCC 4.8.2 and clang 3.4 (also using GCC's STL library). Either the library is broken, or I do not understand the syntax defined by the C++11 standard.

Answer

Joe Z picture Joe Z · Nov 17, 2013

It's not supported in GCC 4.8.x. Check out the corresponding Bugzilla entry:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631

Specifically: "Now regex is implemented. Should come with GCC 4.9 :)"