On Thursday, 19 July 2018 at 08:50:15 UTC, RazvanN wrote:
struct A
{
    int a;
    @disable ~this() {}
}

void main()
{
    A a = A(2);
}

Currently, this code yields:

Error: destructor `A.~this` cannot be used because it is annotated with @disable

I was expecting that disabling the destructor would make it as if the struct does not have a destructor

Why? That's not the semantics of @disable. And why would you want that? What are you actually trying to achieve?

, instead it makes the program not compile. I find this behavior odd: why not make it illegal to disable the destructor if disabling it will surely result in errors wherever the struct is used.

Because it won't surely result in errors wherever the struct is used ... you yourself provide an example below where it doesn't.

 The only
situation where the code will compile is A is never used directly.

Eh? You immediately give a contrary example:

To make matters even more confusing, this code compiles:

class A
{
    int a;
    @disable ~this() {}
}

void main()
{
    A a = new A();
}

Why is that confusing? Why shouldn't it compile? The A that you created is on the heap, so its destructor is never invoked, so what would cause it not to compile?



So, is this a bug or am I missing something?

Yoroshiku onegaishimasu,
RazvanN


Reply via email to