www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 8759] New: autogenerated opEquals does no handle well Variant

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

           Summary: autogenerated opEquals does no handle well Variant
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Phobos
        AssignedTo: nobody puremagic.com
        ReportedBy: fawzi gmx.ch



Not sure where to put this (if it is a phobos or dmd bug), but the interaction
is ugly: adding the field a (or any field that has opEquals with const) to
struct B makes the compilation fail with the given error.

Manually implementing a const opEquals with casts is a workaround for this, but
 I find it ugly because a small change to a (adding opEquals), requires
opEquals to struct using it.

-----------
module t;
import std.variant;

struct A{
    int opEquals(ref const(A) o) const /+ this const is the trigger of the bug
+/ {
        return &o is &this;
    }
}

struct B{
    Variant x;
    A a;
}
------------
fails compiling with dmd 2.060 with:

/home/fawzi/d/dmd2/linux/bin64/../../src/phobos/std/variant.d(513): Error:
static assert  "Assigning Variant objects from const Variant objects is
currently not supported."
/home/fawzi/d/dmd2/linux/bin64/../../src/phobos/std/variant.d(495):       
instantiated from here: opAssign!(const(VariantN!(32LU)))
/home/fawzi/d/dmd2/linux/bin64/../../src/phobos/std/variant.d(768):       
instantiated from here: __ctor!(const(VariantN!(32LU)))
t.d(10):        instantiated from here: opEquals!(const(VariantN!(32LU)))

-----------

might be or be related with issue5310 or issue8328

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