C ++ 11 przepełnienie stosu regex / VS2012

Jestem w trakcie konwertowania jakiegoś starszego kodu regex Boost do C ++ 11 i natknąłem się na problem z jednym z moich przypadków testowych. Oto scenariusz, który powoduje wyjątek przepełnienia stosu przy użyciu std :: regex, ale działał dobrze z boost :: regex. Nie zmieniłem wzorca wyrażenia regularnego i sprawdziłem, czy wzór jest tym, czego chcę. Wygląda na to, że ten fragment wejściowy łańcucha powoduje przepełnienie stosu. Korzystanie z VS2012, kompilacja debugowania x64:

std::regex regx( "(^|\\})(([^\\{:])+:)+([^\\{]*\\{)" );

    const std::string testinput = " COLOR: #000; BACKGROUND-COLOR: #FFF; FONT-FAMILY: VERDANA, ARIAL, HELVETICA, SANS-SERIF; BACKGROUND:URL(URL(___FOO___)); BACKGROUND-2:URL(URL(___FOO___)); BORDER: 0 0 0 0; BORDER-2: 0 0 0; BORDER-3: 0 0; BORDER-4: 0PX; BORDER-5: 0.6; FILTER:PROGID:DXIMAGETRANSFORM.MICROSOFT.ALPHA(OPACITY=100); } ";
    std::smatch what;
    // this next line causes a stack overflow
    std::regex_search( testinput.cbegin(), testinput.cend(), what, regx );  

Patrząc na stos wywołań po wyjątku, wydaje się, że w implementacji wyrażenia regularnego zachodzi pewien rodzaj nieskończonej rekurencji. Obecnie nie mam GCC do przetestowania tego. Co ja robię źle?

Aktualizacja: Po sugestiach poniżej wkleiłem ten kod do aplikacji konsoli, debugowanie VS 2012 x64 i otrzymuję przepełnienie stosu. Jeśli zmienię go na wydanie x64 lub debugowanie lub wydanie Win32, działa poprawnie. Huh ??? Czy muszę ponownie zainstalować VS i / lub platformę SDK? Jestem na Win7 x64.

Aktualizacja 2: nieco pokrewny post:Dlaczego std :: regex_iterator powoduje przepełnienie stosu tymi danymi? Przypuszczam, że jeśli przepisam mój regex, może to pomóc. Nadal nie jestem pewien, dlaczego liczy się bitness. I dlaczego działa dla innych, ale nie dla mnie w moim systemie. Westchnienie.

questionAnswers(1)

yourAnswerToTheQuestion