...one of the most highly
regarded and expertly designed C++ library projects in the
world.

— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards

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

template<typenameExpr>structvalue {// typestypedeftypenameExpr::proto_child0 value_type;typedeftype; };`see-below`

`value`

public
types-
**typedef****typename**Expr::proto_child0 value_type;The raw type of the

`N`

^{th}child as it is stored within`Expr`

. This may be a value or a reference. -
If

`Expr`

is not a 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(&)(A0,...)`

becomes`R(&)(A0,...)`

`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(&)(A0,...)`

becomes`R(&)(A0,...)`

`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(&)(A0,...)`

becomes`R(&)(A0,...)`

`T const &`

becomes`T const &`

`T &`

becomes`T &`

`T`

becomes`T const &`