C ++ 11 Regex Stack Overflow / VS2012

Ich bin gerade dabei, älteren Boost-Regex-Code in C ++ 11 zu konvertieren, und bin auf ein Problem mit einem meiner Testfälle gestoßen. In diesem Szenario wird mit std :: regex eine Stapelüberlaufausnahme ausgelöst, die jedoch mit boost :: regex problemlos funktioniert hat. Ich habe das Muster für reguläre Ausdrücke nicht geändert und überprüft, ob das Muster meinen Wünschen entspricht. Es scheint, dass dieses bestimmte String-Eingabefragment den Stapelüberlauf verursacht. Mit VS2012 x64-Debugbuild:

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 );  

Betrachtet man den Aufrufstapel nach der Ausnahme, scheint es in der Regex-Implementierung eine Art unendliche Rekursion zu geben. Ich habe derzeit kein GCC, mit dem ich das testen kann. Was mache ich falsch?

Update: Nach den folgenden Vorschlägen habe ich diesen Code in eine Konsolen-App eingefügt, VS 2012 x64 debuggen und ich bekomme den Stapelüberlauf. Wenn ich es auf x64-Release oder Win32-Debug oder Release ändere, funktioniert es einwandfrei. Huh ??? Muss ich VS und / oder das Plattform-SDK neu installieren? Ich bin auf Win7 x64.

Update Nr. 2: Etwas verwandter Beitrag:Warum verursacht std :: regex_iterator einen Stapelüberlauf mit diesen Daten? Ich nehme an, wenn ich meinen regulären Ausdruck umschreibe, könnte es helfen. Ich bin mir immer noch nicht sicher, warum die Bissigkeit wichtig ist. Und warum es für andere funktioniert, aber nicht für mich auf meinem System. Seufzer.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage