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.