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.

Reply via email to