From: Robert N. <boa...@gm...> - 2010-11-19 04:25:15
|
Why does the following fail to compile? struct y { const std::vector<y>& get() const; void set(const std::vector<y>&); }; BOOST_FUSION_ADAPT_ADT(y,(std::vector<y>,std::vector<y>,obj.get(),obj.set(val))) int main() { using namespace boost::spirit::qi; using namespace boost::phoenix; boost::spirit::qi::rule<std::string::const_iterator,y()> b; b = (*b)[at_c<0>(_val) = _1]; //ERROR is here } It seems to be a result of fusion loop unrolling or something. The libraries don't like the fact we are parsing a vector of y's and storing them in y. The above code works with seemingly slight modification, but I need the above implementation in my application or a workaround. Attached is main.cpp, a file with only the offending code and three_main.cpp which has 2 other similar grammars, both of which will compile. I think the error is the result of a bug/feature in the fusion and/or spirit::qi library. Please help. Thanks --Robert Nelson |