| Home | Libraries | People | FAQ | More

## Struct template make_expr<Tag, Domain, A...>

boost::proto::result_of::make_expr<Tag, Domain, A...> — Metafunction that computes the return type of the `proto::make_expr()` function, within the specified domain.

## Synopsis

    // In header: <boost/proto/make_expr.hpp>

    template<typename Tag, typename Domain, typename... A>
    struct make_expr<Tag, Domain, A...> {
      // types
      typedef see-below type;
    };

## Description

Computes the return type of the `proto::make_expr()` function.

### `make_expr` public types

1. typedef see-below type;

   Let ``WRAP<X>`` be defined such that:

   - If `X` is `Y &` or (possibly cv-qualified) `boost::reference_wrapper<Y>`, then ``WRAP<X>`` is equivalent to `proto::result_of::as_child<Y, Domain>`.

   - Otherwise, ``WRAP<X>`` is equivalent to `proto::result_of::as_expr<X, Domain>`.

   If `proto::wants_basic_expr<typename Domain::proto_generator>::value` is true, then let ``E`` be `proto::basic_expr`; otherwise, let ``E`` be `proto::expr`.

   If `Tag` is `proto::tag::terminal`, then `type` is a typedef for `typename `WRAP<A0>`::type`.

   Otherwise, `type` is a typedef for `boost::result_of<Domain(`E`< Tag, proto::listN< typename `WRAP<A>`::type...> >)>::type`