$ g++ -std=c++11 boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp -Iboost_1_57_0 In file included from boost_1_57_0/boost/spirit/repository/include/qi_subrule.hpp:17:0, from boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:20: boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp: In instantiation of ‘struct boost::spirit::repository::qi::subrule<0>::group_type_helper&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<1>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<1>&>, 2l>&>, 2l>&>, 1l>&>, 2l>, false>’: boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:451:9: required by substitution of ‘template typename boost::spirit::repository::qi::subrule::group_type_helper::type boost::spirit::repository::qi::subrule::operator=(const Expr&) const [with Expr = Expr; int ID_ = 0; T1 = boost::spirit::unused_type; T2 = boost::spirit::unused_type] [with Expr = boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<1>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<1>&>, 2l>&>, 2l>&>, 1l>&>, 2l>]’ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:42:28: required from ‘client::calculator::calculator() [with Iterator = __gnu_cxx::__normal_iterator >]’ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:86:16: required from here boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:444:13: error: no type named ‘type’ in ‘struct boost::fusion::result_of::make_map, const boost::spirit::repository::qi::subrule_definition<0, boost::fusion::vector0, boost::spirit::unused_type, boost::spirit::unused_type&, boost::fusion::nil_, 0ul, boost::spirit::qi::sequence >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::nil_> > > >, boost::fusion::nil_> > >, false> >’ defs_type; ^ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:446:46: error: no type named ‘type’ in ‘struct boost::fusion::result_of::make_map, const boost::spirit::repository::qi::subrule_definition<0, boost::fusion::vector0, boost::spirit::unused_type, boost::spirit::unused_type&, boost::fusion::nil_, 0ul, boost::spirit::qi::sequence >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::nil_> > > >, boost::fusion::nil_> > >, false> >’ typedef subrule_group type; ^ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp: In instantiation of ‘client::calculator::calculator() [with Iterator = __gnu_cxx::__normal_iterator >]’: boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:86:16: required from here boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:42:28: error: no match for ‘operator=’ (operand types are ‘boost::spirit::repository::qi::subrule<0>’ and ‘const type {aka const boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<1>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<1>&>, 2l>&>, 2l>&>, 1l>&>, 2l>}’) expression = ^ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:42:28: note: candidates are: In file included from boost_1_57_0/boost/spirit/repository/include/qi_subrule.hpp:17:0, from boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:20: boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:451:9: note: template typename boost::spirit::repository::qi::subrule::group_type_helper::type boost::spirit::repository::qi::subrule::operator=(const Expr&) const [with Expr = Expr; int ID_ = 0; T1 = boost::spirit::unused_type; T2 = boost::spirit::unused_type] operator=(Expr const& expr) const ^ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:451:9: note: substitution of deduced template arguments resulted in errors seen above boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: boost::spirit::repository::qi::subrule<0>& boost::spirit::repository::qi::subrule<0>::operator=(const boost::spirit::repository::qi::subrule<0>&) struct subrule ^ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: no known conversion for argument 1 from ‘const type {aka const boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<1>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<1>&>, 2l>&>, 2l>&>, 1l>&>, 2l>}’ to ‘const boost::spirit::repository::qi::subrule<0>&’ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: boost::spirit::repository::qi::subrule<0>& boost::spirit::repository::qi::subrule<0>::operator=(boost::spirit::repository::qi::subrule<0>&&) boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: no known conversion for argument 1 from ‘const type {aka const boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<1>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<1>&>, 2l>&>, 2l>&>, 1l>&>, 2l>}’ to ‘boost::spirit::repository::qi::subrule<0>&&’ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp: In instantiation of ‘struct boost::spirit::repository::qi::subrule<1>::group_type_helper&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>&>, 1l>&>, 2l>, false>’: boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:451:9: required by substitution of ‘template typename boost::spirit::repository::qi::subrule::group_type_helper::type boost::spirit::repository::qi::subrule::operator=(const Expr&) const [with Expr = Expr; int ID_ = 1; T1 = boost::spirit::unused_type; T2 = boost::spirit::unused_type] [with Expr = boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>&>, 1l>&>, 2l>]’ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:48:22: required from ‘client::calculator::calculator() [with Iterator = __gnu_cxx::__normal_iterator >]’ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:86:16: required from here boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:444:13: error: no type named ‘type’ in ‘struct boost::fusion::result_of::make_map, const boost::spirit::repository::qi::subrule_definition<1, boost::fusion::vector0, boost::spirit::unused_type, boost::spirit::unused_type&, boost::fusion::nil_, 0ul, boost::spirit::qi::sequence >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::nil_> > > >, boost::fusion::nil_> > >, false> >’ defs_type; ^ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:446:46: error: no type named ‘type’ in ‘struct boost::fusion::result_of::make_map, const boost::spirit::repository::qi::subrule_definition<1, boost::fusion::vector0, boost::spirit::unused_type, boost::spirit::unused_type&, boost::fusion::nil_, 0ul, boost::spirit::qi::sequence >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::nil_> > > >, boost::fusion::nil_> > >, false> >’ typedef subrule_group type; ^ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp: In instantiation of ‘client::calculator::calculator() [with Iterator = __gnu_cxx::__normal_iterator >]’: boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:86:16: required from here boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:48:22: error: no match for ‘operator=’ (operand types are ‘boost::spirit::repository::qi::subrule<1>’ and ‘const type {aka const boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>&>, 1l>&>, 2l>}’) , term = ^ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:48:22: note: candidates are: In file included from boost_1_57_0/boost/spirit/repository/include/qi_subrule.hpp:17:0, from boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:20: boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:451:9: note: template typename boost::spirit::repository::qi::subrule::group_type_helper::type boost::spirit::repository::qi::subrule::operator=(const Expr&) const [with Expr = Expr; int ID_ = 1; T1 = boost::spirit::unused_type; T2 = boost::spirit::unused_type] operator=(Expr const& expr) const ^ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:451:9: note: substitution of deduced template arguments resulted in errors seen above boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: boost::spirit::repository::qi::subrule<1>& boost::spirit::repository::qi::subrule<1>::operator=(const boost::spirit::repository::qi::subrule<1>&) struct subrule ^ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: no known conversion for argument 1 from ‘const type {aka const boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>&>, 1l>&>, 2l>}’ to ‘const boost::spirit::repository::qi::subrule<1>&’ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: boost::spirit::repository::qi::subrule<1>& boost::spirit::repository::qi::subrule<1>::operator=(boost::spirit::repository::qi::subrule<1>&&) boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: no known conversion for argument 1 from ‘const type {aka const boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>&>, 1l>&>, 2l>}’ to ‘boost::spirit::repository::qi::subrule<1>&&’ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp: In instantiation of ‘struct boost::spirit::repository::qi::subrule<2>::group_type_helper&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<0>&>, 2l>&, boost::proto::exprns_::expr, 0l> >, 2l>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>, false>’: boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:451:9: required by substitution of ‘template typename boost::spirit::repository::qi::subrule::group_type_helper::type boost::spirit::repository::qi::subrule::operator=(const Expr&) const [with Expr = Expr; int ID_ = 2; T1 = boost::spirit::unused_type; T2 = boost::spirit::unused_type] [with Expr = boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<0>&>, 2l>&, boost::proto::exprns_::expr, 0l> >, 2l>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>]’ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:54:24: required from ‘client::calculator::calculator() [with Iterator = __gnu_cxx::__normal_iterator >]’ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:86:16: required from here boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:444:13: error: no type named ‘type’ in ‘struct boost::fusion::result_of::make_map, const boost::spirit::repository::qi::subrule_definition<2, boost::fusion::vector0, boost::spirit::unused_type, boost::spirit::unused_type&, boost::fusion::nil_, 0ul, boost::spirit::qi::alternative, boost::fusion::cons, boost::fusion::cons >, boost::fusion::cons, boost::fusion::nil_> > > >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::nil_> > > > >, false> >’ defs_type; ^ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:446:46: error: no type named ‘type’ in ‘struct boost::fusion::result_of::make_map, const boost::spirit::repository::qi::subrule_definition<2, boost::fusion::vector0, boost::spirit::unused_type, boost::spirit::unused_type&, boost::fusion::nil_, 0ul, boost::spirit::qi::alternative, boost::fusion::cons, boost::fusion::cons >, boost::fusion::cons, boost::fusion::nil_> > > >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::cons, boost::fusion::cons >, boost::fusion::nil_> > >, boost::fusion::nil_> > > > >, false> >’ typedef subrule_group type; ^ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp: In instantiation of ‘client::calculator::calculator() [with Iterator = __gnu_cxx::__normal_iterator >]’: boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:86:16: required from here boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:54:24: error: no match for ‘operator=’ (operand types are ‘boost::spirit::repository::qi::subrule<2>’ and ‘const type {aka const boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<0>&>, 2l>&, boost::proto::exprns_::expr, 0l> >, 2l>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>}’) , factor = ^ boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:54:24: note: candidates are: In file included from boost_1_57_0/boost/spirit/repository/include/qi_subrule.hpp:17:0, from boost_1_57_0/libs/spirit/repository/example/qi/calc1_sr.cpp:20: boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:451:9: note: template typename boost::spirit::repository::qi::subrule::group_type_helper::type boost::spirit::repository::qi::subrule::operator=(const Expr&) const [with Expr = Expr; int ID_ = 2; T1 = boost::spirit::unused_type; T2 = boost::spirit::unused_type] operator=(Expr const& expr) const ^ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:451:9: note: substitution of deduced template arguments resulted in errors seen above boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: boost::spirit::repository::qi::subrule<2>& boost::spirit::repository::qi::subrule<2>::operator=(const boost::spirit::repository::qi::subrule<2>&) struct subrule ^ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: no known conversion for argument 1 from ‘const type {aka const boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<0>&>, 2l>&, boost::proto::exprns_::expr, 0l> >, 2l>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>}’ to ‘const boost::spirit::repository::qi::subrule<2>&’ boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: boost::spirit::repository::qi::subrule<2>& boost::spirit::repository::qi::subrule<2>::operator=(boost::spirit::repository::qi::subrule<2>&&) boost_1_57_0/boost/spirit/repository/home/qi/nonterminal/subrule.hpp:362:12: note: no known conversion for argument 1 from ‘const type {aka const boost::proto::exprns_::expr&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<0>&>, 2l>&, boost::proto::exprns_::expr, 0l> >, 2l>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr, 0l>, boost::spirit::repository::qi::subrule<2>&>, 2l>&>, 2l>}’ to ‘boost::spirit::repository::qi::subrule<2>&&’