On 2/9/15 3:15 PM, Jonathan M Davis via Digitalmars-d-learn wrote:
On Monday, February 09, 2015 13:29:22 Steven Schveighoffer via 
Digitalmars-d-learn wrote:
On 2/8/15 2:57 PM, Jonathan M Davis via Digitalmars-d-learn wrote:
On Sunday, February 08, 2015 17:51:09 bearophile via Digitalmars-d-learn wrote:
fra:

However making it a compiler error would be far, far better

I think this can be filed in Bugzilla as diagnostic enhancement:


class Foo {
       @disable this();
       this(int i) {}
}
void main() {}

The compiler should probably just give you an error telling you that
disabling the default constructor on classes is illegal. And since no
default constructor is automatically declared if you declare another
constructor, there isn't even any point in disabling the default constructor
(which is probably why no one has been complaining about this). @disable
this() only makes sense on structs.

Why? I think it's perfectly acceptable.

What should be illegal is if you extend Foo and don't @disable this on
the derivative.

Why would it we even allow it? What benefit is there? It's meaningless.
@disable this(); is for disabling the init property on structs. Classes
themselves have no init values - and their references have null as their
init value.

The default constructor already follows sensible rules where it's not
generated if another constructor is declared, and derived classes have to
call a base class constructor if the base class doesn't have a default
constructor.

Well, if I do this:

class C {}

I can do this:

new C();

Mechanisms to disable this are kind of awkward. I can define this() as private, but that doesn't help for intra-module calls.

static class C doesn't work.

It really is only useful in the case where you don't want to define a constructor. Which probably means -- you don't want to use a class anyway ;)

But for completeness, it seems like I should be able to have the option of disabling something the compiler does by default. Even if it's next to useless.

-Steve

Reply via email to