Bug 8962 – std.variant.Algebraic should support duplicate types

Status
NEW
Severity
enhancement
Priority
P4
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-11-05T11:50:07Z
Last change time
2024-12-01T16:15:51Z
Assigned to
No Owner
Creator
Rob Jacques
Moved to GitHub: phobos#9941 →

Comments

Comment #0 by sandford — 2012-11-05T11:50:07Z
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);
Comment #1 by tetyys — 2017-04-09T07:41:35Z
> 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.
Comment #2 by robert.schadek — 2024-12-01T16:15:51Z
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