import std.variant : Algebraic, visit; alias Option(T) = Algebraic!( Tag!("Some", T), Tag!"None" ); Option!int option; option = tag!"Some"(1); assert(option.visit!( (Tag!("Some", int) a) => Option!int(tag!"Some"(a + 1)), (Tag!"None" a) => Option!int(a) ) == tag!"Some"(2)); option = tag!"None"(); assert(option.visit!( (Tag!("Some", int) a) => Option!int(tag!"Some"(a + 1)), (Tag!"None" a) => Option!int(a) ) == tag!"None"());
Wraps **T** with **tag_**.