template <Operation, typename... Args>
struct Expression
Type representing a node in an expression tree. Specializations implement the
various types of expression nodes and their behavior. A specialization must
have a template method to perform evaluation compatible with the following
signature:
template
<typename
TargetFormat>
constexpr auto Evaluate(TargetFormat) const { ... }
The |TargetFormat| template parameter is an instantiation of FixedFormat to
provide a hint about the final format of the evaluated expression. This may
be used to make resolution optimization decisions however, the result of the
Evaluate method is not required to be in TargetFormat.
The return value of Evaluate must be an instance of Value
<
> and may be in any
format suitable to the result of the expression node evaluation.