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