March 29, 2015
Is there any way to do a final switch statement in std.variant's Algebraic.
March 30, 2015
On Sunday, 29 March 2015 at 23:19:31 UTC, Freddy wrote:
> Is there any way to do a final switch statement in std.variant's Algebraic.

Not currently. However, std.variant.visit is probably what you want. It enforces that you handle all types contained in the Algebraic.

import std.variant;
import std.stdio;

//For convenience as typeof(null) has no name
alias Null = typeof(null);

alias Maybe(T) = Algebraic!(T, Null);

void main()
{
    Maybe!int n = 0;
    writeln(n); //Prints "0"

    n = null;
    writeln(n); //Prints "null"

    //Prints "I'm Null!"
    n.visit!(
        (int  i) => writeln("I'm an int!"),
        (Null n) => writeln("I'm Null!"),
    );

    auto m = n.visit!(
        (int  i) =>  i,
        (Null n) => -1,
    );
    writeln(m); //Prints "-1"
}