result_type operator()(Expr2 const &e, S const &, D const &) const { expr_type const that = { proto::deep_copy(e.proto_base().child0) , proto::deep_copy(e.proto_base().child1) , proto::deep_copy(e.proto_base().child2) , proto::deep_copy(e.proto_base().child3) }; return proto_generator()(that); }
result_type operator()(Expr2 const &e, S const &, D const &) const { return proto_generator()(expr_type::make(e.proto_base().child0)); }
static type call(Expr2 const &expr) { return typename Expr::proto_domain()(expr_type::make(expr.proto_base().child0)); }