Contains definition of the
proto::lazy<>
transform.
proto::transform< lazy<T> >
A PrimitiveTransform that uses
proto::make<> to build a
CallableTransform, and then uses
proto::call<> to apply it.
proto::lazy<> is useful as a higher-order transform,
when the transform to be applied depends on the current state of the transformation. The
invocation of the
proto::make<>
transform evaluates any nested transforms, and the resulting type is treated
as a CallableTransform, which is evaluated with
proto::call<>.
For the full description of the behavior of the
proto::lazy<>
transform, see the documentation for the nested
proto::lazy::impl<>
class template.
proto::transform_impl<Expr, State, Data>
see-below
proto::lazy<T>::impl<Expr,State,Data>::result_type
is calculated as follows:
If T if of the form
O(A0,…An), then let O'
be boost::result_of<proto::make<O>(Expr, State, Data)>::type
and let T' be O'(A0,…An).
If T if of the form
O(A0,…An ...), then let O'
be boost::result_of<proto::make<O>(Expr, State, Data)>::type
and let T' be O'(A0,…An ...).
Otherwise, let T'
be boost::result_of<proto::make<T>(Expr, State, Data)>::type.
The result type is
boost::result_of<proto::call<T'>(Expr, State, Data)>::type
.
result_type
typename impl::expr_param
typename impl::state_param
typename impl::data_param
proto::lazy<T>::impl<Expr,State,Data>::operator() behaves as follows:
If T if of the form
O(A0,…An), then let O'
be boost::result_of<proto::make<O>(Expr, State, Data)>::type
and let T' be O'(A0,…An).
If T if of the form
O(A0,…An ...), then let O'
be boost::result_of<proto::make<O>(Expr, State, Data)>::type
and let T' be O'(A0,…An ...).
Otherwise, let T'
be boost::result_of<proto::make<T>(Expr, State, Data)>::type.
proto::call<T'>()(expr, state, data)