[Issue 2943] New: Struct copying in presence of alias member this only copies alias this member

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue May 5 16:40:56 PDT 2009


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

           Summary: Struct copying in presence of alias member this only
                    copies alias this member
           Product: D
           Version: 2.029
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Keywords: wrong-code
          Severity: critical
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: dsimcha at yahoo.com


When a struct has a member that is alias this'd and that struct is assigned the
value of another struct of the same type, only the member of the struct that is
alias this'd is copied.  Apparently, D tries conversion via alias this *before*
assigning as the full struct.  

Marking this as critical because it can lead to extremely subtle, hard to find
bugs in user code with absolutely no warning.

import std.stdio;

struct Foo {
    int a;
    int b;
    alias b this;
}

void main() {
    Foo foo, foo2;
    foo.a = 1;
    foo.b = 2;
    foo2.a = 3;
    foo2.b = 4;
    writeln(foo2.a, "\t", foo2.b);  // 3    4
    foo2 = foo;
    writeln(foo2.a, "\t", foo2.b);  // 3    2
}


-- 



More information about the Digitalmars-d-bugs mailing list