On Saturday, 24 July 2021 at 02:02:00 UTC, Mike Parker wrote:
On Friday, 23 July 2021 at 20:24:02 UTC, Jim wrote:

What is the problem here? Should I not call `destroy`? If so, what should I call instead?

The problem is that you've marked main as `@nogc`, and `destroy` is not `@nogc`. Remove the annotation from main and it will compile.

Which raises the question, *why* is `destroy` not `@nogc` when the destructor is `@nogc`? And it turns out the answer is that [it calls `rt_finalize`][1], which [takes its argument as a `void*`][2] and therefore has to assume that any destructor it calls *might* use the GC.

[1]: https://github.com/dlang/druntime/blob/v2.097.1/src/object.d#L3970 [2]: https://github.com/dlang/druntime/blob/v2.097.1/src/rt/lifetime.d#L1438

Reply via email to