As std.variant.Algebraic implements a bounded discriminated union, it should allow for duplicate types. i.e. alias Algebraic!(string,string) A; // Construction using: this(T)(T value, size_t id) A a0 = A("First" ,0); A a1 = A("Second",1); // The type's id should be assessable by an ID member function that returns // a size_t switch(a0.id) { case 0: // The first int type break; case 1: // The second int type break; default: break; } // Similar to std.typecons.Tuple, member functions following the format of _# // should provide a streamlined way of testing the ID and retrieving // the Algebraic's value assert(a0._0 == "First"); // Which is equivalent to enforce(a0.id == 0); assert(a0.get!string == "First"); // Similar to actual unions and std.typecons.Tuple, named members should be // supported. Assignment to named members is allowed i.e. alias Algebraic!(int,"x", int,"y") B; B b = B(10,0); assert(b.id == 0); assert(b._0 == 10); assert(b.x == 10); b.y = 5; assert(b.id == 1); assert(b._1 == 5); assert(b.y == 5);
> As std.variant.Algebraic implements a bounded discriminated union, it should allow for duplicate types Algebraic data type restricts to a closed set of possible types, how is it gonna restrict it to same type twice? I think the actual bug here is that Algebraic doesn't say anything when you pass two same types into it. But it still restricts storage to that one type normally.
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/9941 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB