comportamento indefinido em algum lugar no impulso :: espírito :: qi :: frase_parar

Estou aprendendo a usar a biblioteca boost :: spirit. Eu peguei esse exemplohttp://www.boost.org/doc/libs/1_56_0/libs/spirit/example/qi/num_list1.cpp e compilou no meu computador - funciona bem.

No entanto, se eu modificá-lo um pouco - se eu inicializar o próprio analisador

auto parser = qi::double_ >> *(',' >> qi::double_);

em algum lugar como variável global e passá-lo para o expression_parse, tudo fica louco. Aqui está o código completo modificado (apenas 1 linha é modificada e 1 adicionada) -http://pastebin.com/5rWS3pMt

Se eu executar o código original e passar "3.14, 3.15" para stdin, ele diz que a Análise foi bem-sucedida, mas com a minha versão modificada, ela falha. Eu tentei muitas modificações do mesmo tipo - atribuindo o analisador à variável global - em algumas variantes em alguns compiladores que ele segmenta.

Não entendo o porquê e como é que é. Aqui está outra versão mais simples que imprime true e, em seguida, segfaults no clang ++ e apenas segfaults no g ++

#include <boost/spirit/include/qi.hpp>

#include <iostream>
#include <string>

namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;

const auto doubles_parser_global = qi::double_ >> *(',' >> qi::double_);

int main() {
    const auto doubles_parser_local = qi::double_ >> *(',' >> qi::double_);

    const std::string nums {"3.14, 3.15, 3.1415926"};

    std::cout << std::boolalpha;

    std::cout
        << qi::phrase_parse(
            nums.cbegin(), nums.cend(), doubles_parser_local, ascii::space
        )
        << std::endl;                             // works fine

    std::cout
        << qi::phrase_parse(
            nums.cbegin(), nums.cend(), doubles_parser_global, ascii::space
        )                                         // this segfaults
        << std::endl;
}

questionAnswers(1)

yourAnswerToTheQuestion