灵魂解析器是不是意味着使用auto?
传递给qi::parse()内联时,一个简单的解析器工作正常,但如果通过auto变量传递则崩溃为segfault :
#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
}
Run Code Online (Sandbox Code Playgroud)
用g ++ - 4.8和VC13重新编写代码.
更新:原始代码中修复了错误(p在第二次调用之前未重新初始化parse()).