If handler has a non-void return value, its return value gets forwarded to the caller.
union U { int i; string s; } alias TA = TaggedAlgebraic!U; assert(TA(12).apply!((v) { static if (is(typeof(v) == int)) { assert(v == 12); return 1; } else { return 0; } }) == 1); assert(TA("foo").apply!((v) { static if (is(typeof(v) == string)) { assert(v == "foo"); return 2; } else { return 0; } }) == 2); "baz".apply!((v) { assert(v == "baz"); });
Calls a the given callback with the static type of the contained value.
The handler callback must be a lambda or a single-argument template function that accepts all possible types that the given TaggedAlgebraic can hold.