Asignación de analizadores a variables automáticas

¿Los analizadores de espíritu no están destinados a ser utilizados conauto?

Un analizador simple funciona bien cuando se pasa aqi::parse() en línea, pero se bloquea con segfault si se pasa a través de unauto variable:

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

using namespace std;

namespace qi = boost::spirit::qi;

int main()
{
    string line = "[z]";

    auto bracketed_z = '[' >> +qi::char_('z') >> ']';

    auto p = line.cbegin();
    printf("%d", qi::parse(p, line.cend(), '[' >> +qi::char_('z') >> ']'));  // Works

    p = line.cbegin();
    printf("%d", qi::parse(p, line.cend(), bracketed_z));                    // Crashes
}

Reprueba con g ++ - 4.8 y VC13.

Actualización: se corrigió un error en el código original (p no se reinicializó antes de la segunda llamada aparse())

Respuestas a la pregunta(2)

Su respuesta a la pregunta