boost::spirit -- 试图编译最简单代码的编译器错误

boost::spirit -- compiler error trying to compile most simple code

有人提到,这个问题已经有了答案。好吧,另一个人正在寻找关于 boost::spirit 的解析错误。由于 boost::spirit 是一个解析器生成器,有人可能认为他想知道如何生成一个好的解析错误。我正在寻找解决编译器错误的方法。

当我尝试编译下面的代码时,我总是遇到编译器错误,即 std::pair 不能从单个 int 构造。什么?

#include <boost/spirit/include/qi.hpp>


namespace qi = boost::spirit::qi;
namespace spirit = boost::spirit;
namespace ascii = boost::spirit::ascii;

template<typename Iterator>
struct pair:qi::grammar<Iterator, std::pair<int, int>(), ascii::space_type>
{   
    qi::rule<Iterator, std::pair<int, int>(), ascii::space_type> m_sNameValue;
    pair(void)
        :pair::base_type(m_sNameValue)
    {   m_sNameValue %= spirit::int_ >> spirit::int_;
    }
};

int main(int, char**)
{
    static const char s_ap[] = "3 4";
    pair<const char*> sGrammar;
    const char *pIter = s_ap;
    const char *const pEnd = s_ap + sizeof s_ap;
    std::pair<int, int> sValues;
    if (phrase_parse(pIter, pEnd, sGrammar, boost::spirit::ascii::space, sValues) && pIter == pEnd)
        std::cerr << "parsing successful!" << std::endl;
    else
        std::cerr << "parsing failed!" << std::endl;
}

尝试包括:

#include <boost/fusion/include/std_pair.hpp>