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> 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. 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. 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. 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 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 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 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>. 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 Expr & typename proto::result_of::child_c< Expr const &, N >::type 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.