[Issue 2625] New: Inconsistent behavior with const/immutable struct members

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Jan 27 15:00:02 PST 2009


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

           Summary: Inconsistent behavior with const/immutable struct
                    members
           Product: D
           Version: 2.023
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: dsimcha at yahoo.com


struct Pair {
    immutable uint g1;
    uint g2;
}

void main() {
    works();
    broken();
}

void works() {
    Pair[1] stuff;
    stuff[0] = Pair(1, 2);  // Modify immutable by rebinding whole struct.
}

void broken() {
    Pair stuff;
    stuff = Pair(1, 2);  // Error:  test.broken.stuff cannot modify struct with
immutable members
}

I'm honestly not sure which of these represents truly correct behavior.  This
will take some debate and/or a language lawyer to resolve.  If you interpret
the statement someVar = Pair(num1, num2); as a rebinding operation, similar to
rebinding class references, then the behavior in works() is correct.  If you
believe that the struct case is fundamentally different because structs are
value types, then the behavior in broken() may be correct.  However, either way
the behavior should be consistent and should not depend on whether you're
modifying a stack variable or an array element.


-- 



More information about the Digitalmars-d-bugs mailing list