Simplified representation of a node in an expression tree. proto::basic_expr<> is a node in an expression template tree. It is a container for its child sub-trees. It also serves as the terminal nodes of the tree. Tag is type that represents the operation encoded by this expression. It is typically one of the structs in the boost::proto::tag namespace, but it doesn't have to be. If Arity is 0 then this expr<> type represents a leaf in the expression tree. Args is a list of types representing the children of this expression. It is an instantiation of one of proto::list1<>, proto::list2<>, etc. The child types must all themselves be either proto::expr<> or proto::basic_expr<>& (or extensions thereof via proto::extends<> or BOOST_PROTO_EXTENDS()), unless Arity is 0, in which case Args must be proto::term<T>, where T can be any type. proto::basic_expr<> is a valid Fusion random-access sequence, where the elements of the sequence are the child expressions. Tag Args mpl::long_< Arity > proto::basic_default_domain basic_expr basic_expr basic_expr typename Args::childN For each N in [0,max(Arity,1)). basic_expr const A const & The number of supplied arguments must be max(Arity,1). A new basic_expr object initialized with the specified arguments. basic_expr & *this basic_expr const & This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Representation of a node in an expression tree. proto::expr<> is a node in an expression template tree. It is a container for its child sub-trees. It also serves as the terminal nodes of the tree. Tag is type that represents the operation encoded by this expression. It is typically one of the structs in the boost::proto::tag namespace, but it doesn't have to be. If Arity is 0 then this expr<> type represents a leaf in the expression tree. Args is a list of types representing the children of this expression. It is an instantiation of one of proto::list1<>, proto::list2<>, etc. The child types must all themselves be either proto::expr<> or proto::basic_expr<>& (or extensions thereof via proto::extends<> or BOOST_PROTO_EXTENDS()), unless Arity is 0, in which case Args must be proto::term<T>, where T can be any type. proto::expr<> is a valid Fusion random-access sequence, where the elements of the sequence are the child expressions. Tag Args mpl::long_< Arity > proto::default_domain proto::basic_expr< Tag, Args, Arity > expr expr typename Args::childN For each N in [0,max(Arity,1)). Encodes the return type of proto::expr<>::operator(). Makes proto::expr<> a TR1-style function object type usable with boost::result_of<> unspecified expr const A const & The number of supplied arguments must be max(Arity,1). A new expr object initialized with the specified arguments. expr & *this expr const & This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. unspecified A & Lazy assignment expression A new expression node representing the assignment operation. unspecified A const & This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. unspecified A & This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. unspecified A const & This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. unspecified A & Lazy subscript expression A new expression node representing the subscript operation. unspecified A const & This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. unspecified A & This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. unspecified A const & This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. unspecified A const & Lazy function call A new expression node representing the function call operation. unspecified A const & This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. proto_childN For each N in [0,max(Arity,1)). const long = Arity; Lets you inherit the interface of an expression while hiding from Proto the fact that the type is a Proto expression. Expr Expr const & For an expression type E, proto::is_expr<E>::value is true, but proto::is_expr<proto::unexpr<E> >::value is false.