灵魂分析器是否不适用于auto
? - 4.8和VC13将分析器分配给自动变量
#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
}
Reproes与克++:如果经由auto
变量传递传递给qi::parse()
直列当
一个简单的解析器工作正常,但与崩溃段错误。
更新:原始代码中的错误被修复(p
在第二次调用parse()
之前未被重新初始化)。
任何C++解析器如何处理'auto'?解析器旨在读取运行时确定的特定类型,在编译时解析“auto”类型。所以恕我直言,除非'自动'产生'boost :: variant'或'boost :: any'这是不可能的。 –
请注意,第一个迭代器通过引用传递(IIRC)。也就是说,在第一次调用'qi :: parse'后,'p'已经改变了。 – dyp
谢谢@dyp。修复了错误。 – mstone