On Tuesday, 24 May 2022 at 14:11:57 UTC, Steven Schveighoffer wrote:
Note it has no idea what the real object type is at this point, just that it is an Object (which does not have a @nogc destructor).

It actually has nothing to do with Object. It doesn't have a destructor at all, so there's no problem calling it from any context.

The real problem is that destructors don't actually use the virtual machinery and call super(), meaning it is impossible to tell at compile time what they're doing at all.

I know I wrote at length about this somewhere but can't find it right now. Probably in the chatroom. But even if you know static type, you can't make assumptions about the dynamic type since destructors (for no good reason tbh) don't follow the same rules as other virtual methods, despite the spec saying they are virtual.

Reply via email to