Назначение парсеров для авто переменных
Разве спарт-парсеры не предназначены для использования сauto
?
Простой парсер работает нормально, когда передаетсяqi::parse()
встроенный, но падает с segfault, если передается черезauto
переменная:
#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
}
Воспроизводит с g ++ - 4.8 и VC13.
Обновление: ошибка была исправлена в исходном коде (p
не был повторно инициализирован перед вторым вызовомparse()
).