Kagamin Wrote:

> Kagamin Wrote:
> 
> > Robert Jacques Wrote:
> > 
> > > > Should be Algebraic!(T, void). If that doesn't currently compile, we  
> > > > should make it compile.
> > > >
> > > > Andrei
> > > 
> > > For what it's worth, both Algebraic!(T, void*) and Algebraic!(T, void)  
> > > compile on my branch of std.variant.
> > 
> > can't assign null
> > 
> >     alias Algebraic!(int,void) nint;
> >     nint n1=5;
> >     assert(n1==5);
> >     n1=null;
> > 
> > \std\variant.d:497: Error: static assert  "Cannot store a void* in a 
> > VariantN!(maxSize,int,void). Valid types are (int, void)"
> > test.d:45:        instantiated from here: opAssign!(void*)
> 
> Ahh, there's a workaround:
> 
>       alias Algebraic!(int,void) nint;
>       nint n1=5;
>       assert(n1.get!(int)==5);
>       n1=nint(); //uninitialized Variant, sort of null
>       assert(!n1.hasValue);
>       assert(n1.peek!(int)==null);
>       writeln("error here:");
>       assert(n1.get!(int)==0);

this also works without allowing void!

        alias Algebraic!(int) nint;
        nint n1=5;
        assert(n1.get!(int)==5);
        n1=nint(); //still null
        assert(!n1.hasValue);
        assert(n1.peek!(int)==null);
        writeln("error:");
        assert(n1.get!(int)==0);

Reply via email to