fork download
  1. #include <iostream>
  2.  
  3. #include <boost/spirit/include/qi.hpp>
  4. #include <boost/spirit/include/qi_core.hpp>
  5. #include <boost/fusion/include/adapt_struct.hpp>
  6. #include <boost/spirit/repository/include/qi_kwd.hpp>
  7.  
  8. struct Parameters
  9. {
  10. std::vector<std::string> Genre;
  11. std::vector<std::string> Social;
  12. std::vector<std::string> Tag;
  13. std::size_t Page;
  14. };
  15.  
  16. BOOST_FUSION_ADAPT_STRUCT
  17. (
  18. Parameters,
  19. (std::vector<std::string>, Genre)
  20. (std::vector<std::string>, Social)
  21. (std::vector<std::string>, Tag)
  22. (std::size_t, Page)
  23. )
  24.  
  25. class Parser
  26. {
  27. public:
  28. Parser()
  29. {
  30. using boost::spirit::repository::qi::kwd;
  31.  
  32. parserParameter_ %= *(boost::spirit::ascii::char_-'&');
  33.  
  34. parameterRule_ %=
  35. kwd("g") ['=' > parserParameter_]
  36. / kwd("s") ['=' > parserParameter_]
  37. / kwd("t") ['=' > parserParameter_]
  38. / kwd("p", 0, 1) ['=' > parserParameter_]
  39. ;
  40. }
  41. private:
  42. boost::spirit::qi::rule<const char *, std::string(), boost::spirit::ascii::space_type> parserParameter_;
  43. boost::spirit::qi::rule<const char *, Parameters(), boost::spirit::ascii::space_type> parameterRule_;
  44. };
  45.  
  46. int main() {
  47. // your code goes here
  48. return 0;
  49. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
In file included from /usr/include/boost/proto/traits.hpp:24:0,
                 from /usr/include/boost/proto/expr.hpp:27,
                 from /usr/include/boost/proto/core.hpp:17,
                 from /usr/include/boost/proto/proto.hpp:12,
                 from /usr/include/boost/spirit/home/support/meta_compiler.hpp:19,
                 from /usr/include/boost/spirit/home/qi/meta_compiler.hpp:14,
                 from /usr/include/boost/spirit/home/qi/action/action.hpp:14,
                 from /usr/include/boost/spirit/home/qi/action.hpp:14,
                 from /usr/include/boost/spirit/home/qi.hpp:14,
                 from /usr/include/boost/spirit/include/qi.hpp:16,
                 from prog.cpp:3:
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp: In instantiation of 'static void boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::define(boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>&, const Expr&, mpl_::false_) [with Auto = mpl_::bool_<true>; Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::divides, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::divides, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::divides, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::repository::tag::kwd, boost::fusion::vector1<const char (&)[2]> > >, 0l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char&>, 0l>, boost::spirit::qi::rule<const char*, std::basic_string<char>(), boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l> >&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::repository::tag::kwd, boost::fusion::vector1<const char (&)[2]> > >, 0l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char&>, 0l>, boost::spirit::qi::rule<const char*, std::basic_string<char>(), boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l> >&>, 2l>&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::repository::tag::kwd, boost::fusion::vector1<const char (&)[2]> > >, 0l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char&>, 0l>, boost::spirit::qi::rule<const char*, std::basic_string<char>(), boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l> >&>, 2l>&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::repository::tag::kwd, boost::fusion::vector3<const char (&)[2], int, int> > >, 0l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char&>, 0l>, boost::spirit::qi::rule<const char*, std::basic_string<char>(), boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l> >&>, 2l>&>, 2l>&>, 2l>; Iterator = const char*; T1 = Parameters(); T2 = boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l>; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type; mpl_::false_ = mpl_::bool_<false>]':
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:246:19:   required from 'boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>& boost::spirit::qi::operator%=(boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>&, Expr&&) [with Expr = const boost::proto::exprns_::expr<boost::proto::tagns_::tag::divides, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::divides, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::divides, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::repository::tag::kwd, boost::fusion::vector1<const char (&)[2]> > >, 0l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char&>, 0l>, boost::spirit::qi::rule<const char*, std::basic_string<char>(), boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l> >&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::repository::tag::kwd, boost::fusion::vector1<const char (&)[2]> > >, 0l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char&>, 0l>, boost::spirit::qi::rule<const char*, std::basic_string<char>(), boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l> >&>, 2l>&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::repository::tag::kwd, boost::fusion::vector1<const char (&)[2]> > >, 0l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char&>, 0l>, boost::spirit::qi::rule<const char*, std::basic_string<char>(), boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l> >&>, 2l>&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::repository::tag::kwd, boost::fusion::vector3<const char (&)[2], int, int> > >, 0l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char&>, 0l>, boost::spirit::qi::rule<const char*, std::basic_string<char>(), boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l> >&>, 2l>&>, 2l>&>, 2l>; Iterator = const char*; T1 = Parameters(); T2 = boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l>; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type]'
prog.cpp:34:24:   required from here
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:176:13: error: static assertion failed: error_invalid_expression
             BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
             ^
stdout
Standard output is empty