Note that there are some explanatory texts on larger screens.

plurals
  1. POBoost Fusion compile failure when number of arguments to BOOST_FUSION_ADAPT_STRUCT is 2
    text
    copied!<p>Why does this fail to compile with g++ -c filename.cpp:</p> <pre><code>#include &lt;boost/config/warning_disable.hpp&gt; #include &lt;boost/spirit/include/qi.hpp&gt; #include &lt;boost/spirit/include/phoenix_core.hpp&gt; #include &lt;boost/spirit/include/phoenix_operator.hpp&gt; #include &lt;boost/spirit/include/phoenix_object.hpp&gt; #include &lt;boost/fusion/include/adapt_struct.hpp&gt; #include &lt;boost/fusion/include/io.hpp&gt; #include &lt;boost/lambda/lambda.hpp&gt; #include &lt;boost/spirit/include/phoenix_stl.hpp&gt; #include &lt;boost/variant/variant.hpp&gt; #include &lt;iostream&gt; namespace qi = boost::spirit::qi; namespace ascii = boost::spirit::ascii; namespace phoenix = boost::phoenix; namespace lambda = boost::lambda; using namespace std; struct Intensity { int intensity_; }; BOOST_FUSION_ADAPT_STRUCT( Intensity, (int, intensity_) ) template &lt;typename Iterator&gt; struct InternalParser : qi::grammar&lt;Iterator, Intensity(), ascii::space_type&gt; { InternalParser() : InternalParser::base_type(intensity) { intensity %= qi::int_; } qi::rule&lt;Iterator, Intensity(), ascii::space_type&gt; intensity; }; typedef InternalParser&lt;string::const_iterator&gt; TheParser; TheParser parser; </code></pre> <p>But if I add a new field to the struct Intensity it works:</p> <pre><code>#include &lt;boost/config/warning_disable.hpp&gt; #include &lt;boost/spirit/include/qi.hpp&gt; #include &lt;boost/spirit/include/phoenix_core.hpp&gt; #include &lt;boost/spirit/include/phoenix_operator.hpp&gt; #include &lt;boost/spirit/include/phoenix_object.hpp&gt; #include &lt;boost/fusion/include/adapt_struct.hpp&gt; #include &lt;boost/fusion/include/io.hpp&gt; #include &lt;boost/lambda/lambda.hpp&gt; #include &lt;boost/spirit/include/phoenix_stl.hpp&gt; #include &lt;boost/variant/variant.hpp&gt; #include &lt;iostream&gt; namespace qi = boost::spirit::qi; namespace ascii = boost::spirit::ascii; namespace phoenix = boost::phoenix; namespace lambda = boost::lambda; using namespace std; struct Intensity { int dummy_; int intensity_; }; BOOST_FUSION_ADAPT_STRUCT( Intensity, (int, dummy_) (int, intensity_) ) template &lt;typename Iterator&gt; struct InternalParser : qi::grammar&lt;Iterator, Intensity(), ascii::space_type&gt; { InternalParser() : InternalParser::base_type(intensity) { intensity %= qi::int_ &gt;&gt; qi::int_; } qi::rule&lt;Iterator, Intensity(), ascii::space_type&gt; intensity; }; typedef InternalParser&lt;string::const_iterator&gt; TheParser; TheParser parser; </code></pre> <p>Version of g++: gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)</p> <p>Boost version: 1.41.0</p>
 

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