www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 8962] New: std.variant.Algebraic should support duplicate types

http://d.puremagic.com/issues/show_bug.cgi?id=8962

           Summary: std.variant.Algebraic should support duplicate types
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P3
         Component: Phobos
        AssignedTo: nobody puremagic.com
        ReportedBy: sandford jhu.edu



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;
}


// 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);

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 05 2012