Difficulties with std.variant.Algebraic

Meta jared771 at gmail.com
Thu Jul 11 08:10:18 PDT 2013


On Thursday, 11 July 2013 at 12:30:17 UTC, bearophile wrote:
> Algebraic has several problems, but your code has other 
> problems.

Oh, no doubt. This isn't meant to be serious, industrial strength 
code.

> I suggest to take a look at Nullable, especially the version 
> that makes a constant value the "null".

Nullable will work in this case, but it doesn't solve the general 
problem with Algebraic.

> Also try to almost never use cast() in your code, unless you 
> _really_ know what you are doing.

I'm well aware of the dangers of cast. I was just playing around, 
trying to get this to work.

> Expecting a bit of magic from the D compiler is OK. But someone 
> has to ask for it in a clean way, someone has to implement it, 
> and someone else has to accept it.

Now that I think about it, I'm wondering exactly why the subtypes 
of Algebraic are not covariant with it when returned from a 
function. It works fine with other types that use alias this, 
e.g.:

import std.variant;

struct Test1
{
}

struct Test2
{
     Test1 t;
	
     alias t this;
}

Test1 covarReturn()
{
     //Fine
     return Test2();
}


More information about the Digitalmars-d-learn mailing list