Bug 3259 – Dynamic Initialization of Structs fails type check for some cases
Status
RESOLVED
Resolution
DUPLICATE
Severity
major
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2009-08-19T04:50:00Z
Last change time
2015-06-09T01:28:07Z
Keywords
accepts-invalid
Assigned to
nobody
Creator
hskwk
Comments
Comment #0 by hskwk — 2009-08-19T04:50:34Z
struct S {/* containing anything except reference for class or array */}
struct T {/* containing anything */}
class C {}
void main()
{
// invalid initialization is accepted
S a = T();
S b = 1;
// valid error in compile time : dynamic initilizer of struct
S c = 1.0; // cannot cast double to S
S d = new T;
S e = new C;
S f = new int[1];
// valid error in compile time : assignment
a = T();
b = 1;
}
It seems this problem results from implicit cast in the dynamic initialization of structs.
It is highly severe when both S and T contain only integer type.
In C, any named enum is treated as int.
This problem resembles that.
Comment #1 by hskwk — 2009-09-05T19:20:39Z
*** Issue 3302 has been marked as a duplicate of this issue. ***
Comment #2 by clugdbug — 2009-09-07T01:16:45Z
This is a duplicate of bug 2702, which already has a patch. I've confirmed that the patch fixes this case and bug 3202. Vote for 2702! I think it's quite serious.
*** This issue has been marked as a duplicate of issue 2702 ***