xxxxxxxxxx
/+dub.sdl:
dependency "sumtype" version="~>0.8.11"
+/
import sumtype;
import std.variant;
struct A { int a; }
struct B { int b; }
Algebraic!(A, B) alg;
SumType!(A, B) sum;
unittest {
// visit takes a "default" handler with no arguments
assert(__traits(compiles,
alg.visit!(
(A a) => "got A",
() => "got something"
)
));
// match doesn't
assert(!__traits(compiles,
sum.match!(
(A a) => "got A",
() => "got something"
)
));
}
unittest {
// visit prioritizes non-template handlers
assert(__traits(compiles,
alg.visit!(
something => "got something",
(A a) => "got A"
)
));
// match doesn't, so it considers the second
// handler unreachable and fails to compile
assert(!__traits(compiles,
sum.match!(
something => "got something",
(A a) => "got A"
)
));
}
void main() {}