digitalmars.D.bugs - [Issue 16312] New: "Error: Overlapping fields" caused by use of
- via Digitalmars-d-bugs (42/42) Jul 22 2016 https://issues.dlang.org/show_bug.cgi?id=16312
https://issues.dlang.org/show_bug.cgi?id=16312 Issue ID: 16312 Summary: "Error: Overlapping fields" caused by use of deprecated features in referred to fields Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Keywords: diagnostic, rejects-valid Severity: enhancement Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: Marco.Leise gmx.de The compiler sees fields as overlapping when there are certain types of deprecated features involved in the types of those fields. The two trigger features I could make out are using full symbol paths to bypass imports (i.e. using core.stdc.stdlib.free without importing core.stdc.stdlib) and providing a struct ctor with all arguments having defaults. If such a "deprecated" struct is then used with other fields in an aggregate in a way it would not be allowed for overlapping fields, an error is printed. Here is a short example: struct Deprecated { this(int i = 0) {} } class Bogus { Deprecated* a = null; int seems_to_overlap = 0; } Deprecation: constructor app.Deprecated.this all parameters have default arguments, but structs cannot have default constructors. Error: overlapping default initialization for field a and seems_to_overlap Whether or not the compiler would actually silently overlap the two fields under other circumstances is not known to me. Related in some way: https://issues.dlang.org/show_bug.cgi?id=15498 (Unhelpful error message "destructors, postblits and invariants are not allowed in overlapping fields") --
Jul 22 2016