The type must be a model of . The type must be a model of Domain. The type must be a model of MPL Integral Constant. An Expr represents a tagged node in an expression tree. The children of the Expr must themselves satisfy the Expr concept. The Expr has an arity representing the number of children. If the number of children is zero, the Expr also has a value. An Expr also has an associated Domain. The tag type of the Expr. A typelist representing either the types of the child nodes, or, if the arity of the Expr is 0, of the value of the terminal. The arity (number of child nodes) of the Expr. proto_arity is an MPL Integral Constant. A typedef for an instantiation of proto::basic_expr<> that is equivalent to Expr. Expression types are equivalent if they have the same proto_tag, proto_args, and proto_arity. A typedef for an instantiation of proto::expr<> or proto::basic_expr<> that is equivalent to Expr. Expression types are equivalent if they have the same proto_tag, proto_args, and proto_arity. A typedef for Expr. The Domain of the Expr. proto_domain models Domain. The type of the Nth child of Expr. Requires 0 == N::value || N::value < proto_arity::value Extracts the Nth child from this Expr. Requires N::value < proto_arity::value. Extracts the value from a terminal Expr. Requires 0 == proto_arity::value. Returns an object of type proto::expr<> or proto::basic_expr<> that is equivalent to e.