https://issues.dlang.org/show_bug.cgi?id=21547
Issue ID: 21547
Summary: Oder of constructor declaration affects struct
initializer
Product: D
Version: D2
Hardware: x86_64
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: [email protected]
Reporter: [email protected]
struct Bar
{
@disable this(int a) {}
this(int a, int b) {}
string a;
uint b;
}
void main ()
{
Bar b = { a: "Hello", b: 42 };
}
Compiles fine. Whereas:
struct Bar
{
this(int a, int b) {}
@disable this(int a) {}
string a;
uint b;
}
void main ()
{
Bar b = { a: "Hello", b: 42 };
}
Gives: test.d(12): Error: struct `Bar` has constructors, cannot use `{
initializers }`, use `Bar( initializers )` instead
Expected result: both examples give the same error.
The problem is that the compiler checks the first declared constructor and if
it is disabled it considers that the struct does not have any other
constructors. It should check the entire overload set.
--