| Home | Libraries | People | FAQ | More

## Struct template value

boost::proto::result_of::value — A metafunction that returns the type of the value of a terminal Proto expression.

## Synopsis

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

    template<typename Expr>
    struct value {
      // types
      typedef typename Expr::proto_child0 value_type;
      typedef see-below                   type;
    };

## Description

### `value` public types

1. typedef typename Expr::proto_child0 value_type;

   The raw type of the value as it is stored within `Expr`. This may be a value or a reference.

2. typedef `see-below` type;

   If `Expr` is not a reference type, `type` is computed as follows:

   - `T const(&)[N]` becomes `T[N]`

   - `T[N]` becomes `T[N]`

   - `T(&)[N]` becomes `T[N]`

   - `R(&)(A...)` becomes `R(&)(A...)`

   - `T const &` becomes `T`

   - `T &` becomes `T`

   - `T` becomes `T`

   If `Expr` is a non-const reference type, `type` is computed as follows:

   - `T const(&)[N]` becomes `T const(&)[N]`

   - `T[N]` becomes `T(&)[N]`

   - `T(&)[N]` becomes `T(&)[N]`

   - `R(&)(A...)` becomes `R(&)(A...)`

   - `T const &` becomes `T const &`

   - `T &` becomes `T &`

   - `T` becomes `T &`

   If `Expr` is a const reference type, `type` is computed as follows:

   - `T const(&)[N]` becomes `T const(&)[N]`

   - `T[N]` becomes `T const(&)[N]`

   - `T(&)[N]` becomes `T(&)[N]`

   - `R(&)(A...)` becomes `R(&)(A...)`

   - `T const &` becomes `T const &`

   - `T &` becomes `T &`

   - `T` becomes `T const &`