
So i may have missed something. Here is the transform : struct C_base : bp::or_< bp::when< bp::terminal<std::pair<arithmetic_grammar ,arithmetic_grammar> > , first_(bp::_) > , bp::when< bp::terminal<i_value>, int()> , bp::when< arithmetic_grammar, bp::_value()> , bp::when< bp::unary_expr<bp::_,C_base>,C_base(bp::_child)> , bp::when< bp::binary_expr<bp::_ ,arithmetic_grammar ,arithmetic_grammar > , binary_result<arithmetic>(C_base(bp::_left),C_base(bp::_right) ) > > {}; here is first_ struct first_ : bp::callable { template<class Sig> struct result; template<class This, class Pair> struct result<This(Pair)> { typedef typename boost::remove_reference<Pair>::type::first_type type; }; }; Now when I try to get the C_base of a terminal, i got : erreur: no type named «proto_base_expr» in «struct std::pair<float, float> and other similar error. What did I missed ?