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.
And, it should be consistent between statically defined and locally defined structs?
A similar bug, but for enums, is reported in issue 5460.
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 }
Thanks for simplifying it mate.
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.