
The doc file: libs/xpressive/proto/doc/html/boost_proto/user_s_guide/tree_transformations.html contains: Second, unary_expr< _, CalculatorGrammar >, has a default transform associated with it. It is a pass-through transform. Given an expression of the form expr< T, arg1< X > >, the transform will invoke the CalculatorGrammar transform (which we haven't completely defined yet -- patience) on X resulting in Y, and then reassemble the expression as expr< T, arg1< Y > >. yet unary_expr<_, CalculatorGrammar >, defined in traits.hpp, is: template<typename Tag, typename T> struct unary_expr : has_pass_through_transform<unary_expr<Tag, T> > {...}; so it isn't of the form, expr<T,arg1<X> > for any T or X. OTOH, the nested unary_expr typedef: typedef expr<Tag, args1<T> > type; is of this form; so, I guess what's meant by "Given an expression of the form.." is "Given an expression of type, E, where E::type is of the form..."?