On Friday, 26 May 2023 at 09:07:07 UTC, Alex Biscotti wrote:
Hello everyone! While researching the phobos library, I
discovered that a class can have multiple destructors if the
destructors are added via mixin injection. Accordingly, the
question is whether a description of such feature should be
added to the documentation, since the current description is a
bit confusing - ["There can be only one destructor per
class"](https://dlang.org/spec/class.html#destructors)?
This is not a compiler bug, mixin templates are allowed to
introduce a dtor; observe the output of
```d
import std;
mixin template AddNewDtor()
{
~this()
{
writeln("Mixin dtor");
}
}
class Foo
{
~this()
{
writeln("Class dtor");
}
mixin AddNewDtor;
}
void main()
{
{
Foo s = new Foo;
writeln("-- dtor effect --");
s.__dtor;
}
{
Foo s = new Foo;
writeln("-- xdtor effect --");
s.__xdtor;
}
writeln("-- auto generated destruction... --");
}
```
as you can see, the internal `__xdtor` function is designed to
call the two destructors, while `__dtor` only the "normal one",
i.e the one that 's not mixed in.
This is more a documentation bug IMO.