Странные результаты при использовании регулярного выражения C++11 с gcc 4.8.2 (но работает с регулярным выражением Boost)

Я пытался использовать регулярное выражение C++11, но потерпел неудачу даже в тривиальных примерах. Снаружи кажется, что сравниваются только строки, например:

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

В отличие от этого, библиотека регулярных выражений Boost ведет себя так, как я и ожидал:

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

Я тестировал с GCC 4.8.2 и clang 3.4 (также используя библиотеку STL GCC). Либо библиотека не работает, либо я не понимаю синтаксис, определенный в стандарте C++11.

1 ответ

Решение

Это не поддерживается в GCC 4.8.x. Проверьте соответствующую запись Bugzilla:

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

В частности: "Теперь регулярное выражение реализовано. Должно прийти с GCC 4.9:)"

Другие вопросы по тегам