Contains definition of ``proto::default_generator``, ``proto::generator`<>`, ``proto::pod_generator`<>` and other utilities that users can use to post-process new expression objects that Proto creates.

A simple generator that passes an expression through unchanged.

Generators are intended for use as the first template parameter to the ``proto::domain<>`` class template and control if and how expressions within that domain are to be customized. The `proto::default_generator` makes no modifications to the expressions passed to it.

`proto::callable`
This(Expr)
Expr
Expr `Expr const &

A Proto expression

`

`expr`

A simple generator that passes an expression through unchanged while stating a preference for `proto::basic_expr`<> over `proto::expr`<>.
`proto::use_basic_expr`< `proto::default_generator` >
template< typename > class
A generator that wraps expressions passed to it in the specified extension wrapper.

Generators are intended for use as the first template parameter to the ``proto::domain<>`` class template and control if and how expressions within that domain are to be customized. `proto::generator<>` wraps each expression passed to it in the `Extends<>` wrapper.

This(Expr)
Extends< Expr >
Extends< Expr > `Expr const &

A Proto expression

`

`Extends<Expr>(expr)`

template< typename > class
A generator that wraps expressions passed to it in the specified extension wrapper and uses aggregate initialization for the wrapper.

Generators are intended for use as the first template parameter to the ``proto::domain<>`` class template and control if and how expressions within that domain are to be customized. `proto::pod_generator<>` wraps each expression passed to it in the `Extends<>` wrapper, and uses aggregate initialzation for the wrapped object.

`proto::callable`
This(Expr)
Extends< Expr >
Extends< Expr > `Expr const &

A Proto expression

`

`Extends<Expr> that = {expr}; return that;`

A generator that replaces child nodes held by reference with ones held by value. Use with ``proto::compose_generators<>`` to forward that result to another generator.

Generators are intended for use as the first template parameter to the ``proto::domain<>`` class template and control if and how expressions within that domain are to be customized. `proto::by_value_generator` ensures all child nodes are held by value. This generator is typically composed with a second generator for further processing, as ``proto::compose_generators`<proto::by_value_generator, MyGenerator>`.

`proto::callable`
This(Expr)
unspecified
unspecified `Expr const &

A Proto expression.

`

Equivalent to `proto::deep_copy(expr)`

A composite generator that first applies one transform to an expression and then forwards the result on to another generator for further transformation.

Generators are intended for use as the first template parameter to the ``proto::domain<>`` class template and control if and how expressions within that domain are to be customized. `proto::compose_generators<>` is a composite generator that first applies one transform to an expression and then forwards the result on to another generator for further transformation.

`proto::callable`
This(Expr)
boost::result_of< Second(typename boost::result_of<First(Expr)>::type) >
typename boost::result_of< Second(typename boost::result_of<First(Expr)>::type) >::type `Expr const &

A Proto expression.

`

`Second()(First()(expr))`

Generator

Annotate a generator to indicate that it would prefer to be passed instances of ``proto::basic_expr`<>` rather than ``proto::expr`<>`.

`use_basic_expr< Generator >` is itself a generator.

mpl::bool_< true-or-false >

A Boolean metafunction that tests a generator to see whether it would prefer to be passed instances of ``proto::basic_expr`<>` rather than ``proto::expr`<>`.