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.
*** Issue 3302 has been marked as a duplicate of this issue. ***
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 ***