Contains definitions for child<>, child_c<>, left<>, right<>, tag_of<>, and the helper functions child(), child_c(), value(), left() and right().
Boolean metafunction which tells whether a type is a callable
PolymorphicFunctionObject or not.
proto::is_callable<> is used by the
proto::when<>
transform to determine whether a function type R(A1,...An)
is a CallableTransform or an ObjectTransform.
The former are evaluated using proto::call<>
and the later with proto::make<>.
If proto::is_callable<R>::value is true,
the function type is a CallableTransform; otherwise, it is an ObjectTransform.
Unless specialized for a type
T, proto::is_callable<T>::value
is computed as follows:
If T is a template type
X<Y0,...Yn>,
where all Yx are types for
x in [0,n],
proto::is_callable<T>::value is
boost::is_same<Yn, proto::callable>::value.
If T is derived from proto::callable,
proto::is_callable<T>::value is true.
Otherwise, proto::is_callable<T>::value
is false.
mpl::bool_<true-or-false>
A Boolean metafunction that indicates whether a type requires aggregate initialization.
proto::is_aggregate<> is used by the
proto::make<> transform to determine how
to construct an object of some type T, given some initialization arguments
a0,...an.
If proto::is_aggregate<T>::value is true,
then an object of type T will be initialized as
T t = {a0,...an};.
Otherwise, it will be initialized as
T t(a0,...an).
Note: proto::expr<> is an aggregate.
mpl::bool_<true-or-false>
proto::default_domain
A callable PolymorphicFunctionObject that is equivalent to the
proto::as_expr() function.
proto::callable
This(T)
proto::result_of::as_expr< T, Domain >
typename proto::result_of::as_expr< T, Domain >::type
T &
The object to wrap.
Wrap an object in a Proto terminal if it isn't a Proto expression already.
proto::as_expr<Domain>(t)
typename proto::result_of::as_expr< T const, Domain >::type
T const &
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
proto::default_domain
A callable PolymorphicFunctionObject that is equivalent to the
proto::as_child() function.
proto::callable
This(T)
proto::result_of::as_child< T, Domain >
typename proto::result_of::as_child< T, Domain >::type
T &
The object to wrap.
Wrap an object in a Proto terminal if it isn't a Proto expression already.
proto::as_child<Domain>(t)
typename proto::result_of::as_child< T const, Domain >::type
T const &
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
long
A callable PolymorphicFunctionObject that is equivalent to the
proto::child_c() function.
proto::callable
This(Expr)
proto::result_of::child_c< Expr, N >
typename proto::result_of::child_c< Expr &, N >::type
Expr &
The expression node.
Return the Nth child of the given expression.
proto::is_expr<Expr>::value is
true
N < Expr::proto_arity::value
proto::child_c<N>(expr)
Will not throw.
typename proto::result_of::child_c< Expr const &, N >::type
Expr const &
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
mpl::long_<0>
A callable PolymorphicFunctionObject that is equivalent to the
proto::child() function.
A callable PolymorphicFunctionObject that is equivalent to the
proto::child()
function. N is required to be an MPL Integral Constant.
proto::callable
This(Expr)
proto::result_of::child< Expr, N >
typename proto::result_of::child< Expr &, N >::type
Expr &
The expression node.
Return the Nth child of the given expression.
proto::is_expr<Expr>::value is
true
N::value < Expr::proto_arity::value
proto::child<N>(expr)
Will not throw.
typename proto::result_of::child< Expr const &, N >::type
Expr const &
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
A callable PolymorphicFunctionObject that is equivalent to the
proto::value() function.
proto::callable
This(Expr)
proto::result_of::value< Expr >
typename proto::result_of::value< Expr & >::type
Expr &
The terminal expression node.
Return the value of the given terminal expression.
proto::is_expr<Expr>::value is
true
0 == Expr::proto_arity::value
proto::value(expr)
Will not throw.
typename proto::result_of::value< Expr const & >::type
Expr const &
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
A callable PolymorphicFunctionObject that is equivalent to the
proto::left() function.
This(Expr)
proto::result_of::left< Expr >
proto::callable
typename proto::result_of::left< Expr & >::type
Expr &
The expression node.
Return the left child of the given binary expression.
proto::is_expr<Expr>::value is
true
2 == Expr::proto_arity::value
proto::left(expr)
Will not throw.
typename proto::result_of::left< Expr const & >::type
Expr const &
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
A callable PolymorphicFunctionObject that is equivalent to the
proto::right() function.
This(Expr)
proto::result_of::right< Expr >
proto::callable
typename proto::result_of::right< Expr & >::type
Expr &
The expression node.
Return the right child of the given binary expression.
proto::is_expr<Expr>::value is true
2 == Expr::proto_arity::value
proto::right(expr)
Will not throw.
typename proto::result_of::right< Expr const & >::type
Expr const &
proto::transform< terminal<T> >
A metafunction for generating terminal expression types, a grammar element for matching
terminal expressions, and
a PrimitiveTransform that returns the current expression unchanged.
proto::transform_impl< Expr, State, Data >
Expr
Expr
typename impl::expr_param
The current expression
typename impl::state_param
typename impl::data_param
proto::matches<Expr, proto::terminal<T> >::value is true.
expr
Will not throw.
proto::expr< proto::tag::terminal, proto::term< T > >
type
proto::transform< if_else_<T, U, V> >
A metafunction for generating ternary conditional expression types, a grammar element for
matching ternary conditional expressions, and
a PrimitiveTransform
that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<if_else_>::template impl<Expr, State, Data>
proto::expr< proto::tag::if_else_, proto::list3< T, U, V > >
type
proto::transform< unary_plus<T> >
A metafunction for generating unary plus expression types,
a grammar element for matching unary plus expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<unary_plus>::template impl<Expr, State, Data>
proto::expr< proto::tag::unary_plus, proto::list1< T > >
type
proto::transform< negate<T> >
A metafunction for generating unary minus expression types,
a grammar element for matching unary minus expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<negate>::template impl<Expr, State, Data>
proto::expr< proto::tag::negate, proto::list1< T > >
type
proto::transform< dereference<T> >
A metafunction for generating defereference expression types,
a grammar element for matching dereference expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<dereference>::template impl<Expr, State, Data>
proto::expr< proto::tag::dereference, proto::list1< T > >
type
proto::transform< complement<T> >
A metafunction for generating complement expression types,
a grammar element for matching complement expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<complement>::template impl<Expr, State, Data>
proto::expr< proto::tag::complement, proto::list1< T > >
type
proto::transform< address_of<T> >
A metafunction for generating address_of expression types,
a grammar element for matching address_of expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<address_of>::template impl<Expr, State, Data>
proto::expr< proto::tag::address_of, proto::list1< T > >
type
proto::transform< logical_not<T> >
A metafunction for generating logical_not expression types,
a grammar element for matching logical_not expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<logical_not>::template impl<Expr, State, Data>
proto::expr< proto::tag::logical_not, proto::list1< T > >
type
proto::transform< pre_inc<T> >
A metafunction for generating pre-increment expression types,
a grammar element for matching pre-increment expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<pre_inc>::template impl<Expr, State, Data>
proto::expr< proto::tag::pre_inc, proto::list1< T > >
type
proto::transform< pre_dec<T> >
A metafunction for generating pre-decrement expression types,
a grammar element for matching pre-decrement expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<pre_dec>::template impl<Expr, State, Data>
proto::expr< proto::tag::pre_dec, proto::list1< T > >
type
proto::transform< post_inc<T> >
A metafunction for generating post-increment expression types,
a grammar element for matching post-increment expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<post_inc>::template impl<Expr, State, Data>
proto::expr< proto::tag::post_inc, proto::list1< T > >
type
proto::transform< post_dec<T> >
A metafunction for generating post-decrement expression types,
a grammar element for matching post-decrement expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<post_dec>::template impl<Expr, State, Data>
proto::expr< proto::tag::post_dec, proto::list1< T > >
type
proto::transform< shift_left<T, U> >
A metafunction for generating left-shift expression types,
a grammar element for matching left-shift expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<shift_left>::template impl<Expr, State, Data>
proto::expr< proto::tag::shift_left, proto::list2< T, U > >
type
proto::transform< shift_right<T, U> >
A metafunction for generating right-shift expression types,
a grammar element for matching right-shift expressions, and a
PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<shift_right>::template impl<Expr, State, Data>
proto::expr< proto::tag::shift_right, proto::list2< T, U > >
type
proto::transform< multiplies<T, U> >
A metafunction for generating multiplies expression types,
a grammar element for matching multiplies expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<multiplies>::template impl<Expr, State, Data>
proto::expr< proto::tag::multiplies, proto::list2< T, U > >
type
proto::transform< divides<T, U> >
A metafunction for generating divides expression types,
a grammar element for matching divides expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<divides>::template impl<Expr, State, Data>
proto::expr< proto::tag::divides, proto::list2< T, U > >
type
proto::transform< modulus<T, U> >
A metafunction for generating modulus expression types,
a grammar element for matching modulus expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<modulus>::template impl<Expr, State, Data>
proto::expr< proto::tag::modulus, proto::list2< T, U > >
type
proto::transform< plus<T, U> >
A metafunction for generating binary plus expression types,
a grammar element for matching binary plus expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<plus>::template impl<Expr, State, Data>
proto::expr< proto::tag::plus, proto::list2< T, U > >
type
proto::transform< minus<T, U> >
A metafunction for generating binary minus expression types,
a grammar element for matching binary minus expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<minus>::template impl<Expr, State, Data>
proto::expr< proto::tag::minus, proto::list2< T, U > >
type
proto::transform< less<T, U> >
A metafunction for generating less expression types,
a grammar element for matching less expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<less>::template impl<Expr, State, Data>
proto::expr< proto::tag::less, proto::list2< T, U > >
type
proto::transform< greater<T, U> >
A metafunction for generating greater expression types,
a grammar element for matching greater expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<greater>::template impl<Expr, State, Data>
proto::expr< proto::tag::greater, proto::list2< T, U > >
type
proto::transform< less_equal<T, U> >
A metafunction for generating less-or-equal expression types,
a grammar element for matching less-or-equal expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<less_equal>::template impl<Expr, State, Data>
proto::expr< proto::tag::less_equal, proto::list2< T, U > >
type
proto::transform< greater_equal<T, U> >
A metafunction for generating greater-or-equal expression types,
a grammar element for matching greater-or-equal expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<greater_equal>::template impl<Expr, State, Data>
proto::expr< proto::tag::greater_equal, proto::list2< T, U > >
type
proto::transform< equal_to<T, U> >
A metafunction for generating equal-to expression types,
a grammar element for matching equal-to expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<equal_to>::template impl<Expr, State, Data>
proto::expr< proto::tag::equal_to, proto::list2< T, U > >
type
proto::transform< not_equal_to<T, U> >
A metafunction for generating not-equal-to expression types,
a grammar element for matching not-equal-to expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<mot_equal_to>::template impl<Expr, State, Data>
proto::expr< proto::tag::not_equal_to, proto::list2< T, U > >
type
proto::transform< logical_or<T, U> >
A metafunction for generating logical-or expression types,
a grammar element for matching logical-or expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<logical_or>::template impl<Expr, State, Data>
proto::expr< proto::tag::logical_or, proto::list2< T, U > >
type
proto::transform< logical_and<T, U> >
A metafunction for generating logical-and expression types,
a grammar element for matching logical-and expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<logical_and>::template impl<Expr, State, Data>
proto::expr< proto::tag::logical_and, proto::list2< T, U > >
type
proto::transform< bitwise_and<T, U> >
A metafunction for generating bitwise-and expression types,
a grammar element for matching bitwise-and expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<bitwise_and>::template impl<Expr, State, Data>
proto::expr< proto::tag::bitwise_and, proto::list2< T, U > >
type
proto::transform< bitwise_or<T, U> >
A metafunction for generating bitwise-or expression types,
a grammar element for matching bitwise-or expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<bitwise_or>::template impl<Expr, State, Data>
proto::expr< proto::tag::bitwise_or, proto::list2< T, U > >
type
proto::transform< bitwise_xor<T, U> >
A metafunction for generating bitwise-xor expression types,
a grammar element for matching bitwise-xor expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<bitwise_xor>::template impl<Expr, State, Data>
proto::expr< proto::tag::bitwise_xor, proto::list2< T, U > >
type
proto::transform< comma<T, U> >
A metafunction for generating comma expression types,
a grammar element for matching comma expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<comma>::template impl<Expr, State, Data>
proto::expr< proto::tag::comma, proto::list2< T, U > >
type
proto::transform< mem_ptr<T, U> >
proto::pass_through<mem_ptr>::template impl<Expr, State, Data>
proto::expr< proto::tag::mem_ptr, proto::list2< T, U > >
type
proto::transform< assign<T, U> >
A metafunction for generating assignment expression types,
a grammar element for matching assignment expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<assign>::template impl<Expr, State, Data>
proto::expr< proto::tag::assign, proto::list2< T, U > >
type
proto::transform< shift_left_assign<T, U> >
A metafunction for generating left-shift-assign expression types,
a grammar element for matching left-shift-assign expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<shift_left_assign>::template impl<Expr, State, Data>
proto::expr< proto::tag::shift_left_assign, proto::list2< T, U > >
type
proto::transform< shift_right_assign<T, U> >
A metafunction for generating right-shift-assign expression types,
a grammar element for matching right-shift-assign expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<shift_right_assign>::template impl<Expr, State, Data>
proto::expr< proto::tag::shift_right_assign, proto::list2< T, U > >
type
proto::transform< multiplies_assign<T, U> >
A metafunction for generating multiplies-assign expression types,
a grammar element for matching multiplies-assign expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<multiplies_assign>::template impl<Expr, State, Data>
proto::expr< proto::tag::multiplies_assign, proto::list2< T, U > >
type
proto::transform< divides_assign<T, U> >
A metafunction for generating divides-assign expression types,
a grammar element for matching divides-assign expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<divides_assign>::template impl<Expr, State, Data>
proto::expr< proto::tag::divides_assign, proto::list2< T, U > >
type
proto::transform< modulus_assign<T, U> >
A metafunction for generating modulus-assign expression types,
a grammar element for matching modulus-assign expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<modulus_assign>::template impl<Expr, State, Data>
proto::expr< proto::tag::modulus_assign, proto::list2< T, U > >
type
proto::transform< plus_assign<T, U> >
A metafunction for generating plus-assign expression types,
a grammar element for matching plus-assign expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<plus_assign>::template impl<Expr, State, Data>
proto::expr< proto::tag::plus_assign, proto::list2< T, U > >
type
proto::transform< minus_assign<T, U> >
A metafunction for generating minus-assign expression types,
a grammar element for matching minus-assign expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<minus_assign>::template impl<Expr, State, Data>
proto::expr< proto::tag::minus_assign, proto::list2< T, U > >
type
proto::transform< bitwise_and_assign<T, U> >
A metafunction for generating bitwise-and-assign expression types,
a grammar element for matching bitwise-and-assign expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<bitwise_and_assign>::template impl<Expr, State, Data>
proto::expr< proto::tag::bitwise_and_assign, proto::list2< T, U > >
type
proto::transform< bitwise_or_assign<T, U> >
A metafunction for generating bitwise-or-assign expression types,
a grammar element for matching bitwise-or-assign expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<bitwise_or_assign>::template impl<Expr, State, Data>
proto::expr< proto::tag::bitwise_or_assign, proto::list2< T, U > >
type
proto::transform< bitwise_xor_assign<T, U> >
A metafunction for generating bitwise-xor-assign expression types,
a grammar element for matching bitwise-xor-assign expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<bitwise_xor_assign>::template impl<Expr, State, Data>
proto::expr< proto::tag::bitwise_xor_assign, proto::list2< T, U > >
type
proto::transform< subscript<T, U> >
A metafunction for generating subscript expression types,
a grammar element for matching subscript expressions, and
a PrimitiveTransform that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<subscript>::template impl<Expr, State, Data>
proto::expr< proto::tag::subscript, proto::list2< T, U > >
type
proto::transform< function<A...> >
A metafunction for generating function-call expression types, a grammar element for
matching function-call expressions, and
a PrimitiveTransform
that dispatches to the
proto::pass_through<>
transform.
proto::pass_through<function>::template impl<Expr, State, Data>
proto::expr< proto::tag::function, proto::listN< A... > >
type
proto::transform< nullary_expr<Tag, T> >
A metafunction for generating nullary expression types, a grammar element for matching
nullary expressions, and
a PrimitiveTransform that returns the current expression unchanged.
Use proto::nullary_expr<proto::_, proto::_>
as a grammar element to match any nullary expression.
proto::transform_impl< Expr, State, Data >
Expr
Expr
typename impl::expr_param
The current expression
typename impl::state_param
typename impl::data_param
proto::matches<Expr, proto::nullary_expr<Tag, T> >::value is true.
expr
Will not throw.
proto::expr< Tag, proto::term< T > >
type
proto::transform< unary_expr<Tag, T> >
A metafunction for generating unary expression types with a specified tag type,
a grammar element for matching unary expressions, and
a PrimitiveTransform
that dispatches to the
proto::pass_through<>
transform.
Use proto::unary_expr<proto::_, proto::_>
as a grammar element to match any unary expression.
proto::pass_through<unary_expr>::template impl<Expr, State, Data>
proto::expr< Tag, proto::list1< T > >
type
proto::transform< binary_expr<Tag, T, U> >
A metafunction for generating binary expression types with a specified tag type,
a grammar element for matching binary expressions, and
a PrimitiveTransform
that dispatches to the
proto::pass_through<>
transform.
Use proto::binary_expr<proto::_, proto::_, proto::_> as a grammar element to match any binary expression.
proto::pass_through<binary_expr>::template impl<Expr, State, Data>
proto::expr< Tag, proto::list2< T, U > >
type
proto::transform< nary_expr<Tag, A...> >
A metafunction for generating n-ary expression types with a specified tag type,
a grammar element for matching n-ary expressions, and
a PrimitiveTransform
that dispatches to the
proto::pass_through<>
transform.
Use proto::nary_expr<proto::_, proto::vararg<proto::_> >
as a grammar element to match any n-ary expression; that is, any non-terminal.
proto::pass_through<nary_expr>::template impl<Expr, State, Data>
proto::expr< Tag, proto::listN< A... > >
type
mpl::bool_<true-or-false>
A Boolean metafunction that indicates whether a given type T
is a Proto expression type.
If T is an instantiation of
proto::expr<> or is an extension
(via proto::extends<> or
BOOST_PROTO_EXTENDS()) of such an instantiation,
proto::is_expr<T>::value
is true.
Otherwise, proto::is_expr<T>::value
is false.
A metafunction that returns the tag type of a Proto expression.
typename Expr::proto_tag
A metafunction that returns the arity of a Proto expression.
Expr::proto_arity
proto::default_domain
A metafunction that computes the return type of the
proto::as_expr() function.
The proto::result_of::as_expr<> metafunction turns types into Proto types if they are
not already, by making them Proto terminals held by value if possible. Types which are already Proto types are
left alone.
If T is not yet a Proto type, the resulting terminal type is calculated
as follows:
If T is a function type, let
A be T &. Otherwise, let
A be the type T stripped of
cv-qualifiers. Then, the result type proto::result_of::as_expr<T, Domain>::type
is boost::result_of<Domain(proto::expr< proto::tag::terminal, proto::term<A> >)>::type.
see-below
proto::default_domain
A metafunction that computes the return type of the
proto::as_child() function.
The proto::result_of::as_child<> metafunction turns types into Proto types
if they are not already by making them Proto terminals held by reference. Types which are already Proto
types are left alone.
When T is not yet a Proto type,
the result type proto::result_of::as_child<T, Domain>::type is
boost::result_of<Domain(proto::expr< proto::tag::terminal, proto::term<T &> >)>::type.
When T is already a Proto type
The result type proto::result_of::as_child<T, Domain>::type is
T &.
see-below
mpl::long_<0>
proto::result_of::child_c<Expr, N::value>
A metafunction that returns the type of the Nth
child of a Proto expression, where N is an MPL Integral Constant.
proto::result_of::child<Expr, N> is equivalent to
proto::result_of::child_c<Expr, N::value>.
A metafunction that returns the type of the value of a terminal Proto expression.
The raw type of the value as it is
stored within Expr. This may be a value or a reference.
typename Expr::proto_child0
If Expr is not a reference type, type
is computed as follows:
T const(&)[N] becomes T[N]
T[N] becomes T[N]
T(&)[N] becomes T[N]
R(&)(A...) becomes R(&)(A...)
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(&)(A...) becomes R(&)(A...)
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(&)(A...) becomes R(&)(A...)
T const & becomes T const &
T & becomes T &
T becomes T const &
see-below
proto::result_of::child_c< Expr, 0 >
A metafunction that returns the type of the left child of a binary Proto expression.
proto::result_of::left<Expr> is equivalent to
proto::result_of::child_c<Expr, 0>.
proto::result_of::child_c< Expr, 1 >
A metafunction that returns the type of the right child of a binary Proto expression.
proto::result_of::right<Expr> is equivalent to
proto::result_of::child_c<Expr, 1>.
long
A metafunction that returns the type of the Nth
child of a Proto expression.
A metafunction that returns the type of the Nth
child of a Proto expression. N must be 0 or less than
Expr::proto_arity::value.
The raw type of the Nth child as it is stored
within Expr. This may be a value or a reference.
typename Expr::proto_child0
If Expr is not a reference type, type
is computed as follows:
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 & becomes T const &
T & becomes T &
T becomes T &
If Expr is a const reference type, type
is computed as follows:
T const & becomes T const &
T & becomes T &
T becomes T const &
see-below
typename proto::result_of::as_expr< T >::type
T &
typename proto::result_of::as_expr< T const >::type
T const &
typename proto::result_of::as_expr< T, Domain >::type
T &
typename proto::result_of::as_expr< T const, Domain >::type
T const &
A function that wraps non-Proto expression types in Proto terminals and leaves Proto
expression types alone.
The proto::as_expr() function turns objects into Proto terminals if they
are not Proto expression types already. Non-Proto types are held by value, if possible. Types which are
already Proto types are left alone.
This function can be called either with an explicitly specified
Domain parameter
(i.e., proto::as_expr<Domain>(t)), or without
(i.e., proto::as_expr(t)). If no domain is specified,
proto::default_domain is assumed.
If proto::is_expr<T>::value is
true, then the argument is returned unmodified. Otherwise,
the argument is wrapped in a Proto terminal expression node according to the following rules.
If T is a function type, let
A be T &. Otherwise, let
A be the type T stripped of
cv-qualifiers. Then, proto::as_expr() returns
Domain()(proto::terminal<A>::type::make(t)).
typename proto::result_of::as_child< T >::type
T &
typename proto::result_of::as_child< T const >::type
T const &
typename proto::result_of::as_child< T, Domain >::type
T &
typename proto::result_of::as_child< T const, Domain >::type
T const &
A function that wraps non-Proto expression types in Proto terminals (by reference) and leaves
Proto expression types alone.
The proto::as_child() function turns objects into Proto terminals
if they are not Proto expression types already. Non-Proto types are held by reference. Types which
are already Proto types are simply returned as-is.
This function can be called either with an explicitly specified
Domain parameter
(i.e., proto::as_child<Domain>(t)), or without
(i.e., proto::as_child(t)). If no domain is specified,
proto::default_domain is assumed.
If proto::is_expr<T>::value is
true, then the argument is returned as-is. Otherwise,
proto::as_child() returns
Domain()(proto::terminal<T &>::type::make(t)).
typename proto::result_of::child< Expr &, N >::type
Expr &
The Proto expression.
typename proto::result_of::child< Expr const &, N >::type
Expr const &
typename proto::result_of::child< Expr & >::type
Expr &
typename proto::result_of::child< Expr const & >::type
Expr const &
Return the Nth child of the specified Proto expression.
Return the Nth child of the specified Proto expression.
If N is not specified, as in proto::child(expr),
then N is assumed to be mpl::long_<0>.
The child is returned by reference.
proto::is_expr<Expr>::value is
true.
N is an MPL Integral Constant.
N::value < Expr::proto_arity::value
A reference to the Nth child
of expr.
Will not throw.
typename proto::result_of::child_c< Expr &, N >::type
long
Expr &
typename proto::result_of::child_c< Expr const &, N >::type
long
Expr const &
Return the Nth child of the specified
Proto expression.
Return the Nth child of the specified Proto
expression. The child is returned by reference.
proto::is_expr<Expr>::value is
true.
N < Expr::proto_arity::value
A reference to the Nth child
of expr.
Will not throw.
typename proto::result_of::value< Expr & >::type
Expr &
typename proto::result_of::value< Expr const & >::type
Expr const &
Return the value stored within the specified Proto terminal expression.
Return the the value stored within the specified Proto terminal expression. The value is
returned by reference.
0 == Expr::proto_arity::value
A reference to the terminal's value
Will not throw.
typename proto::result_of::left< Expr & >::type
Expr &
typename proto::result_of::left< Expr const & >::type
Expr const &
Return the left child of the specified binary Proto expression.
Return the left child of the specified binary Proto expression. The child is returned by reference.
proto::is_expr<Expr>::value is
true.
2 == Expr::proto_arity::value
A reference to the left child of expr.
Will not throw.
typename proto::result_of::right< Expr & >::type
Expr &
The Proto expression.
typename proto::result_of::right< Expr const & >::type
Expr const &
Return the right child of the specified binary Proto expression.
Return the right child of the specified binary Proto expression. The child is returned by reference.
proto::is_expr<Expr>::value is
true.
2 == Expr::proto_arity::value
A reference to the right child of expr.
Will not throw.