Calls a type-appropriate function with the value held in a SumType.
For each possible type the SumType can hold, the given handlers are
checked, in order, to see whether they accept a single argument of that type.
The first one that does is chosen as the match for that type.
Every type must have a matching handler, and every handler must match at
least one type. This is enforced at compile time.
Handlers may be functions, delegates, or objects with opCall overloads. If a
function with more than one overload is given as a handler, all of the
overloads are considered as potential matches.
Calls a type-appropriate function with the value held in a SumType.
For each possible type the SumType can hold, the given handlers are checked, in order, to see whether they accept a single argument of that type. The first one that does is chosen as the match for that type.
Every type must have a matching handler, and every handler must match at least one type. This is enforced at compile time.
Handlers may be functions, delegates, or objects with opCall overloads. If a function with more than one overload is given as a handler, all of the overloads are considered as potential matches.
Templated handlers are also accepted, and will match any type for which they can be implicitly instantiated. See "Introspection-based matching" for an example of templated handler usage.