A PrimitiveTransform which computes a type by evaluating any nested transforms and then constructs an object of that type. More...
#include <make.hpp>
Classes | |
struct | impl |
Public Types | |
typedef make< Object > | transform_type |
Public Member Functions | |
BOOST_PROTO_CALLABLE () typedef X proto_is_transform_ | |
BOOST_FORCEINLINE boost::proto::detail::apply_transform < transform_type(Expr const &)> ::result_type | operator() (Expr &&e) const |
BOOST_FORCEINLINE boost::proto::detail::apply_transform < transform_type(Expr const &, State const &)> ::result_type | operator() (Expr &&e, State &&s) const |
BOOST_FORCEINLINE boost::proto::detail::apply_transform < transform_type(Expr const &, State const &, Data const &)> ::result_type | operator() (Expr &&e, State &&s, Data &&d) const |
A PrimitiveTransform which computes a type by evaluating any nested transforms and then constructs an object of that type.
The make<>
transform checks to see if Object
is a template. If it is, the template type is disassembled to find nested transforms. Proto considers the following types to represent transforms:
proto::is_callable< type >value
is true
boost::result_of<make<T<X0,X1,...> >(Expr, State, Data)>::type
is evaluated as follows. For each X
in X0,X1,...
, do:
X
is a template like U<Y0,Y1,...>
, then let X'
be boost::result_of<make<U<Y0,Y1,...> >(Expr, State, Data)>::type
(which evaluates this procedure recursively). Note whether any substitutions took place during this operation. X
is a transform, then let X'
be boost::result_of<when<_, X>(Expr, State, Data)>::type
. Note that a substitution took place. X'
be X
, and note that no substitution took place. T<X0',X1',...>
has a nested ::type
typedef, the result type is T<X0',X1',...>::type
. T<X0',X1',...>
.Note that when<>
is implemented in terms of call<>
and make<>
, so the above procedure is evaluated recursively.
|
inherited |
|
inherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |