apply

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.

  1. auto apply(TA ta)
  2. auto apply(T value)
    apply
    (
    alias handler
    T
    )
    ()
    if (
    !isInstanceOf!(TaggedAlgebraic, T)
    )

Return Value

Type: auto

If handler has a non-void return value, its return value gets forwarded to the caller.

Examples

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");
});

Meta