Most of the expression kinds are the overloadable operators (operator!(),
operator<<=(),
etc.), See expr_kind
for the full list.
There are three special kinds of expressions:
expr_kind::terminal
A terminal contains a non-Expression value, and represents a leaf-node
in an expression tree. A terminal may have a placeholder<>
value, in which case it acts as a placeholder.
expr_kind::if_else
An if_else expression
is analogous to the C++ ternary operator (?:).
It's up to you to make sure that the conditional expression given to
if_else can be converted
to bool; Boost.YAP does
not check this.
expr_kind::expr_ref
An expr_ref expression
is one that acts as a (possibly const)
lvalue reference to another expression. It exists to prevent unnecessary
copies of expressions.