Thanks for excellent explanation!
On Sunday, 28 October 2018 at 19:00:52 UTC, Jonathan M Davis
wrote:
Because Object predats @safe (and most attributes), it really
isn't compatible with them. In fact, it predates const (since
it's basically the same as it was in D1) and it's only possible
to compare const class objects because of a hack in the free
function opEquals (which == lowers to) which casts away const
(meaning that if you're not careful, you can actually violate
the type system with == by mutating an object in a class'
...
So, unfortunately, for now, you're going to have to use
@trusted with == on classes, as stupid as that is, though as a
workaround, you could always create an @trusted wrapper
function that just called ==. It would still be annoying, but
it would be cleanly restricted the @trusted bits.
- Jonathan M Davis