July 22, 2016
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")

--