[Proto] Nested Types in Transforms
Dear all, In my namespace arity_caller, I have a struct CanBeCalled<> such that CanBeCalled<T, mpl::int_<n> >::type is an mpl::bool_<> representing whether T can be called with n doubles. I also have the following grammar (in a file called 'EmtnGram.hpp') in which I am trying to employ this CanBeCalled<>::type: struct EmtnShiftFObjGram: boost::proto::and_ < boost::proto::shift_right < EmtnTermOrGram, boost::proto::terminal<boost::proto::_> >, boost::proto::if_ < arity_caller::CanBeCalled < boost::proto::_value(boost::proto::_right), EmtnTermOrGram(boost::proto::_left) >::type >
{}; For an expression like x >> f, here, I am trying to make sure that f can be called with the right number of doubles -- that I have accumulated in x. When I compile this under GCC 4.5.1 (MinGW32, WinXP, SP3) and Boost 1.42, I get the following errors: In file included from main.cpp:5:0: EmtnGram.hpp:141:4: error: incomplete type 'arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>' used in nested name specifier EmtnGram.hpp:141:4: error: incomplete type 'arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>' used in nested name specifier EmtnGram.hpp:146:3: error: template argument 1 is invalid EmtnGram.hpp:147:2: error: template argument 2 is invalid Do I get it correctly that it's the ::type part of CanBeCalled<>::type that is confusing the compiler? Why is that happening? And, what's the cure? TIA, --Hossein
On 2/16/2011 7:04 AM, Hossein Haeri wrote:
Dear all,
In my namespace arity_caller, I have a struct CanBeCalled<> such that CanBeCalled<T, mpl::int_<n> >::type is an mpl::bool_<> representing whether T can be called with n doubles. I also have the following grammar (in a file called 'EmtnGram.hpp') in which I am trying to employ this CanBeCalled<>::type:
struct EmtnShiftFObjGram: boost::proto::and_ < boost::proto::shift_right < EmtnTermOrGram, boost::proto::terminal<boost::proto::_> >, boost::proto::if_ < arity_caller::CanBeCalled < boost::proto::_value(boost::proto::_right), EmtnTermOrGram(boost::proto::_left) >::type >
{};
When you access a member of a class template, it causes the template to be instantiated. CanBeCalled cannot legally be instantiated with two function types. Hence the error. Also, proto::if_ takes as it's template parameter a Transform. It should be a transform that evaluates to a compile-time Boolean. You can easily solve both problems by making the parameter to if_ an ObjectTransform, as follows: struct EmtnShiftFObjGram: boost::proto::and_ < boost::proto::shift_right < EmtnTermOrGram, boost::proto::terminal<boost::proto::_> >, boost::proto::if_ < arity_caller::CanBeCalled < boost::proto::_value(boost::proto::_right), EmtnTermOrGram(boost::proto::_left) >() >
{}; Hope that helps, -- Eric Niebler BoostPro Computing http://www.boostpro.com
Hi Eric,
When you access a member of a class template, it causes the template to be instantiated. CanBeCalled cannot legally be instantiated with two function types. Hence the error.
Function types? Are you really speaking of types of ordinary C++ functions? If so, I have to say that, by coincidence, I had not passed any function types at all. Or, am I missing anything here?
Also, proto::if_ takes as it's template parameter a Transform. It should be a transform that evaluates to a compile-time Boolean.
So, this problem can simply be solved by replacing the '::type' part in my code with '()' in CanBeCalled<...>() even despite the fact that I never designed my CanBeCalled<> to be a transform?
You can easily solve both problems by making the parameter to if_ an ObjectTransform, as follows: <snip>
Unfortunately, this didn't quite help. Despite the fact that EmtnShiftFObjGram itself does compile, GCC 4.5.1 (under MinGW32, WinXP, SP3) fails to compile all the code I like. Here are my test cases, where the line annotated with *** doesn't compile. The error message I get can be found in the PS: struct Plus1 { double operator () (double d) const {return d + 1;} }; struct Plus2 { double operator () (double d1, double d2) const {return d1 + d2;} }; double plus1(double d) {return d + 1;} double plus2(double d1, double d2) {return d1 + d2;} int main() { EW1<InpPool, GameState, AmmoMsg>() >> &plus1; EW1<InpPool, GameState, AmmoMsg>() >> Plus1(); (EW1<InpPool, GameState, AmmoMsg>() || EW1<InpPool, GameState, AmmoMsg>()) >> Plus2();//*** (EW1<InpPool, GameState, AmmoMsg>() || EW1<InpPool, GameState, AmmoMsg>()) >> &plus2; return 0; } Any idea now? TIA, --Hossein P.S. In file included from boost_1_42_0/boost/proto/core.hpp:22:0, from boost_1_42_0/boost/proto/proto.hpp:12, from EmtnGram.hpp:4, from main.cpp:5: boost_1_42_0/boost/proto/matches.hpp: In instantiation of 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> >': boost_1_42_0/boost/proto/matches.hpp:935:13: instantiated from 'boost::proto::detail::and_2<true, boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> > >' boost_1_42_0/boost/proto/matches.hpp:994:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::and_<boost::proto::op::shift_right<EmtnTermOrGram, boost::proto::op::terminal<boost::proto::wildcardns_::_> >, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> > >' boost_1_42_0/boost/proto/matches.hpp:960:13: instantiated from 'boost::proto::detail::or_2<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_3<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_4<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::or_<boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> > >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::or_<EmtnTermOrGram, EmtnShiftFObjGram> >' boost_1_42_0/boost/proto/matches.hpp:505:13: instantiated from 'boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, EmotionGram>' boost_1_42_0/boost/proto/operators.hpp:77:9: instantiated from 'boost::proto::detail::generate_if_left<EmotionDom, boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >' boost_1_42_0/boost/proto/operators.hpp:115:9: instantiated from 'boost::proto::detail::as_expr_if2<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, Plus2, void, void>' boost_1_42_0/boost/proto/operators.hpp:154:9: instantiated from 'boost::proto::detail::as_expr_if<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, Plus2, void, void>' main.cpp:33:86: instantiated from here boost_1_42_0/boost/proto/matches.hpp:391:13: error: invalid use of incomplete type 'struct boost::proto::detail::uncvref<arity_caller::CanBeCalled<Plus2, mpl_::integral_c<int, 2> > >::type' Arity.hpp:76:9: error: declaration of 'struct boost::proto::detail::uncvref<arity_caller::CanBeCalled<Plus2, mpl_::integral_c<int, 2> > >::type' In file included from boost_1_42_0/boost/preprocessor/iteration/detail/iter/forward1.hpp:57:0, from boost_1_42_0/boost/proto/matches.hpp:367, from boost_1_42_0/boost/proto/core.hpp:22, from boost_1_42_0/boost/proto/proto.hpp:12, from EmtnGram.hpp:4, from main.cpp:5: boost_1_42_0/boost/proto/matches.hpp: In instantiation of 'boost::proto::detail::and_2<true, boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> > >': boost_1_42_0/boost/proto/matches.hpp:994:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::and_<boost::proto::op::shift_right<EmtnTermOrGram, boost::proto::op::terminal<boost::proto::wildcardns_::_> >, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> > >' boost_1_42_0/boost/proto/matches.hpp:960:13: instantiated from 'boost::proto::detail::or_2<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_3<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_4<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::or_<boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> > >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::or_<EmtnTermOrGram, EmtnShiftFObjGram> >' boost_1_42_0/boost/proto/matches.hpp:505:13: instantiated from 'boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, EmotionGram>' boost_1_42_0/boost/proto/operators.hpp:77:9: instantiated from 'boost::proto::detail::generate_if_left<EmotionDom, boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >' boost_1_42_0/boost/proto/operators.hpp:115:9: instantiated from 'boost::proto::detail::as_expr_if2<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, Plus2, void, void>' boost_1_42_0/boost/proto/operators.hpp:154:9: instantiated from 'boost::proto::detail::as_expr_if<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, Plus2, void, void>' main.cpp:33:86: instantiated from here boost_1_42_0/boost/proto/matches.hpp:935:13: error: 'value' is not a member of 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> >' boost_1_42_0/boost/proto/matches.hpp: In instantiation of 'boost::proto::detail::or_2<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >': boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_3<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_4<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::or_<boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> > >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::or_<EmtnTermOrGram, EmtnShiftFObjGram> >' boost_1_42_0/boost/proto/matches.hpp:505:13: instantiated from 'boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, EmotionGram>' boost_1_42_0/boost/proto/operators.hpp:77:9: instantiated from 'boost::proto::detail::generate_if_left<EmotionDom, boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >' boost_1_42_0/boost/proto/operators.hpp:115:9: instantiated from 'boost::proto::detail::as_expr_if2<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, Plus2, void, void>' boost_1_42_0/boost/proto/operators.hpp:154:9: instantiated from 'boost::proto::detail::as_expr_if<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, Plus2, void, void>' main.cpp:33:86: instantiated from here boost_1_42_0/boost/proto/matches.hpp:960:13: error: 'value' is not a member of 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::and_<boost::proto::op::shift_right<EmtnTermOrGram, boost::proto::op::terminal<boost::proto::wildcardns_::_> >, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> > >' boost_1_42_0/boost/proto/matches.hpp: In instantiation of 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::or_<EmtnTermOrGram, EmtnShiftFObjGram> >': boost_1_42_0/boost/proto/matches.hpp:505:13: instantiated from 'boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, EmotionGram>' boost_1_42_0/boost/proto/operators.hpp:77:9: instantiated from 'boost::proto::detail::generate_if_left<EmotionDom, boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >' boost_1_42_0/boost/proto/operators.hpp:115:9: instantiated from 'boost::proto::detail::as_expr_if2<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, Plus2, void, void>' boost_1_42_0/boost/proto/operators.hpp:154:9: instantiated from 'boost::proto::detail::as_expr_if<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, Plus2, void, void>' main.cpp:33:86: instantiated from here boost_1_42_0/boost/proto/matches.hpp:985:13: error: 'value' is not a member of 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, boost::proto::control::or_<boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> > >' In file included from boost_1_42_0/boost/proto/core.hpp:26:0, from boost_1_42_0/boost/proto/proto.hpp:12, from EmtnGram.hpp:4, from main.cpp:5: boost_1_42_0/boost/proto/operators.hpp: In instantiation of 'boost::proto::detail::generate_if_left<EmotionDom, boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >': boost_1_42_0/boost/proto/operators.hpp:115:9: instantiated from 'boost::proto::detail::as_expr_if2<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, Plus2, void, void>' boost_1_42_0/boost/proto/operators.hpp:154:9: instantiated from 'boost::proto::detail::as_expr_if<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, Plus2, void, void>' main.cpp:33:86: instantiated from here boost_1_42_0/boost/proto/operators.hpp:77:9: error: 'value' is not a member of 'boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Plus2&>, 0l> >, 2l>, EmotionGram>' In file included from boost_1_42_0/boost/proto/core.hpp:22:0, from boost_1_42_0/boost/proto/proto.hpp:12, from EmtnGram.hpp:4, from main.cpp:5: boost_1_42_0/boost/proto/matches.hpp: In instantiation of 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> >': boost_1_42_0/boost/proto/matches.hpp:935:13: instantiated from 'boost::proto::detail::and_2<true, boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> > >' boost_1_42_0/boost/proto/matches.hpp:994:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::and_<boost::proto::op::shift_right<EmtnTermOrGram, boost::proto::op::terminal<boost::proto::wildcardns_::_> >, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> > >' boost_1_42_0/boost/proto/matches.hpp:960:13: instantiated from 'boost::proto::detail::or_2<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_3<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_4<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::or_<boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> > >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::or_<EmtnTermOrGram, EmtnShiftFObjGram> >' boost_1_42_0/boost/proto/matches.hpp:505:13: instantiated from 'boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, EmotionGram>' boost_1_42_0/boost/proto/operators.hpp:77:9: instantiated from 'boost::proto::detail::generate_if_left<EmotionDom, boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >' boost_1_42_0/boost/proto/operators.hpp:115:9: instantiated from 'boost::proto::detail::as_expr_if2<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, const Plus2, void, void>' boost_1_42_0/boost/proto/operators.hpp:154:9: instantiated from 'boost::proto::detail::as_expr_if<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, const Plus2, void, void>' main.cpp:33:86: instantiated from here boost_1_42_0/boost/proto/matches.hpp:391:13: error: invalid use of incomplete type 'struct boost::proto::detail::uncvref<arity_caller::CanBeCalled<Plus2, mpl_::integral_c<int, 2> > >::type' Arity.hpp:76:9: error: declaration of 'struct boost::proto::detail::uncvref<arity_caller::CanBeCalled<Plus2, mpl_::integral_c<int, 2> > >::type' In file included from boost_1_42_0/boost/preprocessor/iteration/detail/iter/forward1.hpp:57:0, from boost_1_42_0/boost/proto/matches.hpp:367, from boost_1_42_0/boost/proto/core.hpp:22, from boost_1_42_0/boost/proto/proto.hpp:12, from EmtnGram.hpp:4, from main.cpp:5: boost_1_42_0/boost/proto/matches.hpp: In instantiation of 'boost::proto::detail::and_2<true, boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> > >': boost_1_42_0/boost/proto/matches.hpp:994:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::and_<boost::proto::op::shift_right<EmtnTermOrGram, boost::proto::op::terminal<boost::proto::wildcardns_::_> >, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> > >' boost_1_42_0/boost/proto/matches.hpp:960:13: instantiated from 'boost::proto::detail::or_2<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_3<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_4<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::or_<boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> > >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::or_<EmtnTermOrGram, EmtnShiftFObjGram> >' boost_1_42_0/boost/proto/matches.hpp:505:13: instantiated from 'boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, EmotionGram>' boost_1_42_0/boost/proto/operators.hpp:77:9: instantiated from 'boost::proto::detail::generate_if_left<EmotionDom, boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >' boost_1_42_0/boost/proto/operators.hpp:115:9: instantiated from 'boost::proto::detail::as_expr_if2<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, const Plus2, void, void>' boost_1_42_0/boost/proto/operators.hpp:154:9: instantiated from 'boost::proto::detail::as_expr_if<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, const Plus2, void, void>' main.cpp:33:86: instantiated from here boost_1_42_0/boost/proto/matches.hpp:935:13: error: 'value' is not a member of 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> >' boost_1_42_0/boost/proto/matches.hpp: In instantiation of 'boost::proto::detail::or_2<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >': boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_3<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:968:13: instantiated from 'boost::proto::detail::or_4<false, boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::or_<boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> > >' boost_1_42_0/boost/proto/matches.hpp:985:13: instantiated from 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::or_<EmtnTermOrGram, EmtnShiftFObjGram> >' boost_1_42_0/boost/proto/matches.hpp:505:13: instantiated from 'boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, EmotionGram>' boost_1_42_0/boost/proto/operators.hpp:77:9: instantiated from 'boost::proto::detail::generate_if_left<EmotionDom, boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >' boost_1_42_0/boost/proto/operators.hpp:115:9: instantiated from 'boost::proto::detail::as_expr_if2<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, const Plus2, void, void>' boost_1_42_0/boost/proto/operators.hpp:154:9: instantiated from 'boost::proto::detail::as_expr_if<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, const Plus2, void, void>' main.cpp:33:86: instantiated from here boost_1_42_0/boost/proto/matches.hpp:960:13: error: 'value' is not a member of 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::and_<boost::proto::op::shift_right<EmtnTermOrGram, boost::proto::op::terminal<boost::proto::wildcardns_::_> >, boost::proto::control::if_<arity_caller::CanBeCalled<boost::proto::_value(boost::proto::_child_c<1>), EmtnTermOrGram(boost::proto::_child_c<0>)>()> > >' boost_1_42_0/boost/proto/matches.hpp: In instantiation of 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::or_<EmtnTermOrGram, EmtnShiftFObjGram> >': boost_1_42_0/boost/proto/matches.hpp:505:13: instantiated from 'boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, EmotionGram>' boost_1_42_0/boost/proto/operators.hpp:77:9: instantiated from 'boost::proto::detail::generate_if_left<EmotionDom, boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >' boost_1_42_0/boost/proto/operators.hpp:115:9: instantiated from 'boost::proto::detail::as_expr_if2<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, const Plus2, void, void>' boost_1_42_0/boost/proto/operators.hpp:154:9: instantiated from 'boost::proto::detail::as_expr_if<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, const Plus2, void, void>' main.cpp:33:86: instantiated from here boost_1_42_0/boost/proto/matches.hpp:985:13: error: 'value' is not a member of 'boost::proto::detail::matches_<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, boost::proto::control::or_<boost::proto::when<boost::proto::op::logical_or<EmtnTermOrGram, EmtnTermOrGram>, boost::mpl::plus<EmtnTermOrGram(boost::proto::_child_c<0>), EmtnTermOrGram(boost::proto::_child_c<1>)>()>, boost::proto::when<boost::proto::control::and_<boost::proto::op::terminal<boost::proto::wildcardns_::_>, boost::proto::control::if_<IsEmtnStarter<boost::proto::_value>()> >, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFuncGram, mpl_::int_<1>()>, boost::proto::when<EmtnShiftFObjGram, mpl_::int_<1>()> > >' In file included from boost_1_42_0/boost/proto/core.hpp:26:0, from boost_1_42_0/boost/proto/proto.hpp:12, from EmtnGram.hpp:4, from main.cpp:5: boost_1_42_0/boost/proto/operators.hpp: In instantiation of 'boost::proto::detail::generate_if_left<EmotionDom, boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >': boost_1_42_0/boost/proto/operators.hpp:115:9: instantiated from 'boost::proto::detail::as_expr_if2<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, const Plus2, void, void>' boost_1_42_0/boost/proto/operators.hpp:154:9: instantiated from 'boost::proto::detail::as_expr_if<boost::proto::tag::shift_right, const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >, const Plus2, void, void>' main.cpp:33:86: instantiated from here boost_1_42_0/boost/proto/operators.hpp:77:9: error: 'value' is not a member of 'boost::proto::result_of::matches<boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<const EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const Plus2&>, 0l> >, 2l>, EmotionGram>' main.cpp: In function 'int main()': main.cpp:33:86: error: no match for 'operator>>' in 'operator||(const Left&, const Right&) [with Left = EW1<InpPool, GameState, AmmoMsg>, Right = EW1<InpPool, GameState, AmmoMsg>, typename boost::proto::detail::enable_binary<EmotionDom, IsEmtnStarter<Arg>, Left, IsEmtnStarter<Right>, Right, typename boost::proto::functional::make_expr<boost::proto::tag::logical_or, EmotionDom>::impl<const Left&, const Right&>::result_type>::type = EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::logical_or, boost::proto::argsns_::list2<EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> >, EmotionExpr<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const EW1<InpPool, GameState, AmmoMsg>&>, 0l> > >, 2l> >](((const EW1<InpPool, GameState, AmmoMsg>&)((const EW1<InpPool, GameState, AmmoMsg>*)(& EW1<InpPool, GameState, AmmoMsg>())))) >> Plus2()'
On 2/16/2011 10:23 PM, Hossein Haeri wrote:
Hi Eric,
When you access a member of a class template, it causes the template to be instantiated. CanBeCalled cannot legally be instantiated with two function types. Hence the error.
Function types? Are you really speaking of types of ordinary C++ functions? If so, I have to say that, by coincidence, I had not passed any function types at all. Or, am I missing anything here?
You did. Look again: arity_caller::CanBeCalled < boost::proto::_value(boost::proto::_right), EmtnTermOrGram(boost::proto::_left) >::type What do you think _value(_right) and EmtnTermOrGram(_left) are?
Also, proto::if_ takes as it's template parameter a Transform. It should be a transform that evaluates to a compile-time Boolean.
So, this problem can simply be solved by replacing the '::type' part in my code with '()' in CanBeCalled<...>() even despite the fact that I never designed my CanBeCalled<> to be a transform?
Yes. That makes it an ObjectTransform. Check the docs for ObjectTransform and proto::make.
You can easily solve both problems by making the parameter to if_ an ObjectTransform, as follows: <snip>
Unfortunately, this didn't quite help. Despite the fact that EmtnShiftFObjGram itself does compile, GCC 4.5.1 (under MinGW32, WinXP, SP3) fails to compile all the code I like. Here are my test cases, where the line annotated with *** doesn't compile. The error message I get can be found in the PS:
I don't know, and without a complete example that I can compile, I can't help you further. And a warning: I'm completely swamped with work and am not likely to be much help in the near future. Maybe you post your code to the proto list (cross-posting) and someone can chime in there. -- Eric Niebler BoostPro Computing http://www.boostpro.com
participants (2)
-
Eric Niebler
-
Hossein Haeri