【发布时间】:2017-03-22 14:57:47
【问题描述】:
在一个简单的解析器测试Live On Coliru,
std::string str("x123x");
boost::iterator_range<boost::range_iterator<decltype(str)>::type> attr;
if( x3::parse( boost::begin(str), boost::end(str), x3::lit('x') >> x3::raw[+x3::digit] >> x3::lit('x'), attr ) ) {
std::cout<<"Match! attr = "<<attr<<std::endl;
} else {
std::cout<<"Not match!"<<std::endl;
}
解析器
x3::lit('x') >> x3::raw[+x3::digit] >> x3::lit('x')
应该合成boost::iterator_range<Iterator> 类型的属性。但它无法编译。如果我们删除两个x3::lit('x') 中的任何一个,它就会编译。尽管Live on Coliru,相同的代码也可以用qi 编译。
【问题讨论】:
标签: c++ boost boost-spirit boost-spirit-qi boost-spirit-x3