C ++ regex segfault en secuencias largas

Estaba analizando el volcado de stackoverflow y aparecí enesta pregunta aparentemente inocente con detalles pequeños, casi invisibles, que tiene 22311 espacios al final del texto.

Estoy usando std :: regex (de alguna manera funcionan mejor para mí que boost :: regex) para reemplazar todos los espacios en blanco continuos con un solo espacio como este:

std::regex space_regex("\\s+", std::regex::optimize);
...
std::regex_replace(out, in, in + strlen(in), space_regex, " ");

SIGSEGV aparece y he comenzado a investigar.

Código de prueba:

#include <regex>
...
std::regex r("\\s+",  std::regex::optimize);
const char* bomb2 = "Small text\n\nwith several\n\nlines.";
std::string test(bomb2);
for (auto i = 0; i < N; ++i) test += " ";

std::string out = std::regex_replace(test.c_str(), r, " ");
std::cout << out << std::endl;

para (gcc 5.3.0)

$ g++ -O3 -std=c++14 regex-test.cpp -o regex-test.out

máximoN antes de que aparezca SIGSEGV es 21818 (para esta cadena en particular), y para

$ g++ -O0 -std=c++14 regex-test.cpp -o regex-test.out

es 12180.

'Ok, intentemos con el sonido metálico, es tendencia y apunta a reemplazar gcc', nunca me he equivocado tanto. Con-O0 Clang (v. 3.7.1) se bloquea en 9696 espacios - menos que gcc, pero no mucho, pero con-O3 e incluso con-O2 se estrella en CERO espacios.

Crash dump presenta enormes stacktraces (35k frames) de llamadas recursivas de

std::__detail::_Executor<char*, std::allocator<std::__cxx11::sub_match<char*> >, std::__cxx11::regex_traits<char>, true>::_M_dfs

Pregunta 1: ¿Es esto un error? Si es así, ¿debo informarlo?

Pregunta 2: ¿Hay una manera inteligente de superar el problema (aparte de aumentar el tamaño de la pila del sistema, probar otras bibliotecas de expresiones regulares y escribir funciones propias para reemplazar los espacios en blanco)?

Enmienda: informe de error creado para libstdc ++

Respuestas a la pregunta(2)

Su respuesta a la pregunta