Переполнение стека регулярных выражений в C ++ 11 / VS2012

Я нахожусь в процессе преобразования более старого кода регулярного выражения Boost в C ++ 11, и я наткнулся на проблему с одним из моих тестовых случаев. Вот сценарий, который вызывает исключение переполнения стека с использованием std :: regex, но отлично работает с boost :: regex. Я не изменил шаблон регулярного выражения и убедился, что шаблон - это то, что я хочу. Кажется, именно этот фрагмент строки ввода вызывает переполнение стека. Используя VS2012, отладочная сборка 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 );  

Глядя на стек вызовов после исключения, кажется, что в реализации регулярных выражений происходит некоторый тип бесконечной рекурсии. У меня в настоящее время нет GCC, чтобы проверить это с. Что я делаю неправильно?

Обновление: после предложений, приведенных ниже, я вставил этот код в консольное приложение VS 2012 x64 debug и получил переполнение стека. Если я изменю его на выпуск x64, или отладку или выпуск Win32, он будет работать нормально Да ??? Нужно ли переустанавливать VS и / или SDK платформы? Я на Win7 x64.

Обновление № 2: Несколько связанный пост:Почему std :: regex_iterator вызывает переполнение стека этими данными? Я полагаю, если я переписываю свое регулярное выражение, это может помочь. Я все еще не уверен, почему битность имеет значение все же. И почему это работает для других, но не для меня в моей системе. Вздох.

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

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