www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 16312] New: "Error: Overlapping fields" caused by use of


          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

Whether or not the compiler would actually silently overlap the two fields
under other circumstances is not known to me.

Related in some way:
(Unhelpful error message "destructors, postblits and invariants are not allowed
in overlapping fields")

Jul 22 2016