Bug 6080 – Statically constructed Structs - Constructor/Initialization ambiguity

Status
RESOLVED
Resolution
WORKSFORME
Severity
major
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2011-05-31T02:24:08Z
Last change time
2022-12-06T13:45:15Z
Assigned to
No Owner
Creator
daniel

Comments

Comment #0 by daniel350 — 2011-05-31T02:24:08Z
SO Question: http://stackoverflow.com/questions/6184422/ambiguous-struct-constructors-in-d Source example: http://www.pastie.org/1997238 Actual Output: 5,3 2,8 2,10 Expected Output: 2,10 2,8 2,10 If the above doesn't provide all the information, then I'll summarize: Statically constructed structs are defaulting to the parameter list initialization instead of using a constructor. I'm to assume this is a bug, and possibly a flaw in ambiguity, at least a warning should be displayed.
Comment #1 by daniel350 — 2011-05-31T02:24:56Z
And, it should be consistent between statically defined and locally defined structs?
Comment #2 by andrej.mitrovich — 2011-05-31T03:07:51Z
A similar bug, but for enums, is reported in issue 5460.
Comment #3 by bearophile_hugs — 2011-05-31T04:13:00Z
Please, don't link code that's in external paste sites, because their pages are often ephemeral. The code, with small changes: import core.stdc.stdio: printf; struct Foo { int a = 2; int b = 3; this(int c) { a = c / 2; b = c * 2; } this(float c) { a = cast(int) c / 2; b = cast(int) c * 2; } static Foo F1 = Foo(4.3); static Foo F2 = Foo(5); } void main() { printf("%d %d\n", Foo.F1.a, Foo.F1.b); // 2 8 printf("%d %d\n", Foo.F2.a, Foo.F2.b); // 5 3 Foo F3 = Foo(5); printf("%d %d\n", F3.a, F3.b); // 2 10 }
Comment #4 by daniel350 — 2011-05-31T16:32:01Z
Thanks for simplifying it mate.
Comment #5 by razvan.nitu1305 — 2022-12-06T13:45:15Z
I cannot reproduce this. When I run the code presented in https://issues.dlang.org/show_bug.cgi?id=6080#c3 , I am getting: 2 8 2 10 2 10 Which is the correct result.