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