Gcc 4.8 или более ранняя версия содержит ошибки в регулярных выражениях?

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

#include <regex>
#include <iostream>

int main (int argc, const char * argv[]) {
    std::regex r("st|mt|tr");
    std::cerr << "st|mt|tr" << " matches st? " << std::regex_match("st", r) << std::endl;
    std::cerr << "st|mt|tr" << " matches mt? " << std::regex_match("mt", r) << std::endl;
    std::cerr << "st|mt|tr" << " matches tr? " << std::regex_match("tr", r) << std::endl;
}

выходы:

st|mt|tr matches st? 1
st|mt|tr matches mt? 1
st|mt|tr matches tr? 0

при компиляции с gcc (MacPorts gcc47 4.7.1_2) 4.7.1, либо с

g++ *.cc -o test -std=c++11
g++ *.cc -o test -std=c++0x

или же

g++ *.cc -o test -std=gnu++0x

Кроме того, регулярное выражение работает хорошо, если у меня есть только два альтернативных шаблона, например,st|mtТаким образом, похоже, что последний не соответствует по некоторым причинам. Код хорошо работает с компилятором Apple LLVM.

Есть идеи о том, как решить проблему?

Update Одним из возможных решений является использование групп для реализации нескольких альтернатив, например,(st|mt)|tr.

Ответы на вопрос(3)

Ваш ответ на вопрос