← Back to index
|
Original Bugzilla link
Bug 8938 – static struct initializer allows to not explicitly initialize members with disabled constructor
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-11-02T07:46:46Z
Last change time
2022-08-16T11:51:34Z
Keywords
accepts-invalid
Assigned to
No Owner
Creator
Denis Shelomovskii
Comments
Comment #0
by verylonglogin.reg — 2012-11-02T07:46:46Z
Current behavior: --- struct S0 { @disable this(); } struct S { int i; S0 s0; } static assert(!__traits(compiles, { S0 s; })); static assert(!__traits(compiles, { S0 s = S0(); })); static assert( __traits(compiles, { S0 s = S0.init; })); static assert(!__traits(compiles, { struct S1 { S0 s0; this(int) { } } })); static assert(!__traits(compiles, { S s; })); static assert( __traits(compiles, { S s = S(5, S0.init); })); static assert(!__traits(compiles, { S s = S(); })); // assert failure static assert(!__traits(compiles, { S s = S(5); })); // assert failure static assert(!__traits(compiles, { S x = { }; })); // assert failure static assert(!__traits(compiles, { S x = { i:1 }; })); // assert failure --- It looks inconsistent because this is disabled: --- struct S1 { int i; S0 s0; // Error: constructor main.S1.this field s0 must be initialized in constructor this(int i) { this.i = i; } } ---
Comment #1
by razvan.nitu1305 — 2022-08-16T11:51:34Z
The code now compiles successfully with git head. Closing as fixed.