Zuweisen von Parsern zu automatischen Variablen

Sind Spirit Parser nicht dazu gedacht, mit ihnen verwendet zu werden?auto?

Ein einfacher Parser funktioniert einwandfrei, wenn er an übergeben wirdqi::parse() Inline, stürzt jedoch mit segfault ab, wenn es über einauto 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
}

Repros mit g ++ - 4.8 und VC13.

Update: Ein Fehler wurde im Originalcode behoben (p wurde vor dem zweiten Aufruf von nicht neu initialisiertparse()).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage