Note that there are some explanatory texts on larger screens.

plurals
  1. POboost spirit grammar error - "no type named ‘size’ in ‘struct boost::spirit::unused_type’"
    primarykey
    data
    text
    <p>Could please help me with diagnosing the following error. I have a simple grammar:</p> <pre><code>struct json_start_elem_grammar_object : qi::grammar&lt;StreamIterator, void(const CharType*, CharType), ascii::space_type&gt; { json_start_elem_grammar_object() : json_start_elem_grammar_object::base_type(start_elem, "start_elem") { start_elem = qi::lit('"') &gt; qi::lit(qi::_1) &gt; qi::lit('"') &gt; qi::lit(':') &gt; qi::lit(qi::_2) &gt; -qi::lit('\n'); } qi::rule&lt;StreamIterator, void(const CharType*, CharType), ascii::space_type&gt; start_elem; }; </code></pre> <p>when making an instance of this grammar I get an error:</p> <pre><code>/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:220:19: required from ‘boost::spirit::qi::rule&lt;Iterator, T1, T2, T3, T4&gt;&amp; boost::spirit::qi::rule&lt;Iterator, T1, T2, T3, T4&gt;::operator=(const Expr&amp;) [with Expr = boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2&lt;const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2&lt;const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2&lt;const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2&lt;const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2&lt;const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::terminal_ex&lt;boost::spirit::tag::lit, boost::fusion::vector1&lt;char&gt; &gt; &gt;, 0l&gt;&amp;, const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::lazy_terminal&lt;boost::spirit::tag::lit, boost::phoenix::actor&lt;boost::phoenix::composite&lt;boost::phoenix::detail::function_eval&lt;1&gt;, boost::fusion::vector&lt;boost::phoenix::value&lt;boost::spirit::terminal&lt;boost::spirit::tag::lit&gt; &gt;, boost::spirit::argument&lt;0&gt;, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_&gt; &gt; &gt;, 1&gt; &gt;, 0l&gt;&amp;&gt;, 2l&gt;&amp;, const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::terminal_ex&lt;boost::spirit::tag::lit, boost::fusion::vector1&lt;char&gt; &gt; &gt;, 0l&gt;&amp;&gt;, 2l&gt;&amp;, const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::terminal_ex&lt;boost::spirit::tag::lit, boost::fusion::vector1&lt;char&gt; &gt; &gt;, 0l&gt;&amp;&gt;, 2l&gt;&amp;, const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::lazy_terminal&lt;boost::spirit::tag::lit, boost::phoenix::actor&lt;boost::phoenix::composite&lt;boost::phoenix::detail::function_eval&lt;1&gt;, boost::fusion::vector&lt;boost::phoenix::value&lt;boost::spirit::terminal&lt;boost::spirit::tag::lit&gt; &gt;, boost::spirit::argument&lt;1&gt;, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_&gt; &gt; &gt;, 1&gt; &gt;, 0l&gt;&amp;&gt;, 2l&gt;&amp;, const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::negate, boost::proto::argsns_::list1&lt;const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::terminal_ex&lt;boost::spirit::tag::lit, boost::fusion::vector1&lt;char&gt; &gt; &gt;, 0l&gt;&amp;&gt;, 1l&gt;&amp;&gt;, 2l&gt;; Iterator = boost::spirit::basic_istream_iterator&lt;char&gt;; T1 = void(const char*, char); T2 = boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::ascii&gt; &gt;, 0l&gt;; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type]’ /home/marcin/workspace/json_archive/basic_json_grammar.hpp:149:18: required from ‘boost::archive::basic_json_grammar&lt;CharType&gt;::json_start_elem_grammar_object::json_start_elem_grammar_object() [with CharType = char]’ /home/marcin/workspace/json_archive/basic_json_grammar.hpp:194:50: required from ‘boost::archive::basic_json_grammar&lt;CharType&gt;::basic_json_grammar() [with CharType = char]’ /home/marcin/workspace/json_archive/json_iarchive_impl.ipp:141:85: required from ‘boost::archive::json_iarchive_impl&lt;Archive&gt;::json_iarchive_impl(std::istream&amp;, unsigned int) [with Archive = boost::archive::naked_json_iarchive; std::istream = std::basic_istream&lt;char&gt;]’ /home/marcin/workspace/json_archive/json_iarchive.hpp:102:68: required from here /usr/include/boost/fusion/sequence/intrinsic/size.hpp:33:20: error: no type named ‘size’ in ‘struct boost::spirit::unused_type’ struct unsegmented_size : Sequence::size {}; </code></pre> <p>where</p> <pre><code>using CharType = char; using StreamIterator = spirit::basic_istream_iterator&lt;CharType&gt;; </code></pre> <p>After few days of working with boost.serialization &amp; boost.spirit compilation errors I'm totally brain-dead and seem to be stuck on this one :/</p> <p>The usage of this grammar (slightly simplified) is:</p> <pre><code>json_start_elem_grammar_object start_elem_parser_object; using invoker = _details::invoke_grammar&lt;CharType, decltype(start_elem_parser_object(name, preamble))&gt;; invoker::apply( is, start_elem_parser_object(name, preamble), "Invalid object element in archive"); </code></pre> <p>where</p> <pre><code>decltype(is) = IStream&amp; decltype(name) = const CharType* decltype(preamble) = CharType template&lt;typename CharType, typename Expr&gt; struct invoke_grammar&lt;CharType, Expr&gt; { using IStream = std::basic_istream&lt;CharType&gt;; using StreamIterator = spirit::basic_istream_iterator&lt;CharType&gt;; static void apply(IStream &amp; is, Expr const&amp; grammar, const CharType* errMsg) { boost::io::ios_flags_saver ifs(is); is.unsetf (std::ios::skipws); StreamIterator it_end; StreamIterator it_beg (is); if (!qi::phrase_parse(it_beg, it_end, grammar, ascii::space)) { boost::serialization::throw_exception( archive_exception(archive_exception::invalid_signature, errMsg) ); } } }; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload