Issue 8962 - std.variant.Algebraic should support duplicate types
Summary: std.variant.Algebraic should support duplicate types
Status: NEW
Alias: None
Product: D
Classification: Unclassified
Component: phobos (show other issues)
Version: D2
Hardware: All All
: P4 enhancement
Assignee: No Owner
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-11-05 11:50 UTC by Rob Jacques
Modified: 2024-12-01 16:15 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Rob Jacques 2012-11-05 11:50:07 UTC
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 tetyys 2017-04-09 07:41:35 UTC
> 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 dlangBugzillaToGithub 2024-12-01 16:15:51 UTC
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