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)