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.