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()
)