www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 14854] New: disable this inconsistent between structs and

https://issues.dlang.org/show_bug.cgi?id=14854

          Issue ID: 14854
           Summary:  disable this inconsistent between structs and classes
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: minor
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: issues.dlang jmdavisProg.com

This code

class C1
{
     disable this() {}
}

class C2
{
     disable this();
}

struct S1
{
     disable this() {}
}

struct S2
{
     disable this();
}

void main()
{
}

results in this compilation error:

q.d(13): Error: constructor q.S1.this default constructor for structs only
allowed with  disable and no body

For structs, it's clearly required that  disable this() not have a body,
whereas for classes, for some reason, the compiler doesn't care. The error
message does explicitly use the word struct, which implies that this difference
is intentional, but I don't see any reason to allow for the inconsistency. It
just makes it less obvious, which syntax you should be using.

And in general, I don't see any reason to allow bodies on  disabled functions.
One interesting side effect of putting a body on the  disabled default
constructor on a class is that it actually affects the code coverage analyzer,
because the lines inside the body never run and count as uncovered.

So, I suggest that we deprecate having bodies on _all_  disabled functions and
move to making it an error like it is with  disabling the init property on a
struct.

--
Jul 31 2015