Function apply
Calls a the given callback with the static type of the contained value.
auto apply(alias handler, TA)
(
TA ta
)
if (isInstanceOf!(TaggedAlgebraic, TA));
auto apply(alias handler, T)
(
T value
)
if (!isInstanceOf!(TaggedAlgebraic, T));
The handler
callback must be a lambda or a single-argument template
function that accepts all possible types that the given TaggedAlgebraic
can hold.
Returns
If handler
has a non-void return value, its return value gets
forwarded to the caller.
Example
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");
});
}
/// User-defined attibute to disable `opIndex` forwarding for a particular tagged union member.
@property auto disableIndex() { assert(__ctfe, "disableIndex must only be used as an attribute."); return DisableOpAttribute(OpKind .index, null);