[Issue 8738] New: Struct assignment constructor order of operations DMD 2.0.6
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Sep 29 22:34:49 PDT 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8738
Summary: Struct assignment constructor order of operations DMD
2.0.6
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: adamsibson at hotmail.com
--- Comment #0 from adamsibson at hotmail.com 2012-09-29 22:35:13 PDT ---
DMD 2.0.6
This behaviour seems inconsistent and unintuitive:
void main() {
int[3] a = [1,2,3]; // The array is fine
a = [4, a[0], 6];
struct S { // The stuct is the problem
int a, b, c;
}
S s = S(1,2,3);
s = S(4, s.a, 6);
assert(a == [4,1,6]); // What I'd expect
assert(s == S(4,4,6)); // Unhelpful
}
Setting the struct writes s.a before evaluating it while the
reverse is true of the array assignment. GDC
does what I'd expect and gives both as 4,1,6. This seems to be a bug to me, it
creates an easy to miss bug and behaves differently to another common data
structure and to the same data structure with a different compiler.
Creating a custom constructor for the struct fixes the issue:
struct S {
int a, b, c;
this(int a, int b, int c)
{
this.a = a;
this.b = b;
this.c = c;
}
}
assert(s == S(4,1,6));
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list