| Home | Libraries | People | FAQ | More

## Struct template impl

boost::proto::pass_through::impl

## Synopsis

    // In header: <boost/proto/transform/pass_through.hpp>

    template<typename Expr, typename State, typename Data>
    struct impl :  proto::transform_impl<Expr, State, Data> {
      // types
      typedef typename proto::result_of::child_c<Grammar, N>::type       GN;           // For each N in [0,Expr arity), for exposition only
      typedef typename proto::result_of::child_c<Expr, N>::type          EN;           // For each N in [0,Expr arity), for exposition only
      typedef typename boost::result_of<GN(EN,State,Data)>::type         RN;           // For each N in [0,Expr arity), for exposition only
      typedef typename Expr::proto_tag                                   T;            // For exposition only
      typedef boost::is_same<Domain, deduce_domain>                      Deduce;       // For exposition only
      typedef typename Expr::proto_domain                                DD;           // For exposition only
      typedef typename mpl::if_<Deduce, DD, Domain>::type                D;            // For exposition only
      typedef typename D::proto_generator                                G;            // For exposition only
      typedef proto::listN<R0,...RN>                                     A;            // For exposition only
      typedef proto::expr<T, A>                                          E;            // For exposition only
      typedef proto::basic_expr<T, A>                                    BE;           // For exposition only
      typedef typename mpl::if_<proto::wants_basic_expr<G>, BE, E>::type expr_type;    // For exposition only
      typedef typename boost::result_of<D(expr_type)>::type              result_type;

      // public member functions
      result_type operator()(typename impl::expr_param,
                             typename impl::state_param,
                             typename impl::data_param) const;
    };

## Description

### `impl` public member functions

1.     result_type operator()(typename impl::expr_param expr,
                              typename impl::state_param state,
                              typename impl::data_param data) const;

   Requires: | `proto::matches<Expr, Grammar>::value` is `true`.
   Returns: |
       D()(expr_type::make(
         G0()(proto::child_c<0>(expr), state, data),
         ...
         GN()(proto::child_c<N>(expr), state, data)
       ))