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 ***