On Thursday, 5 January 2017 at 03:05:21 UTC, Jonathan M Davis
wrote:
However, since code that legitimately casts a function to alter
its attributes should be _very_ rare, it should also be quite
rare that the problem even comes up.
It is very rare to have it in code, but the low-level function
that does this rare thing (custom assertion function) may be very
frequently called, indirectly.
So, I would think that making casts for attributes legal during
CTFE wouldn't be a problem (though I could be missing
something), but at the same time, if someone is actally asking
for such a capability, that's very worrisome. That implies that
pure and @nogc are not being used correctly and that casts are
being used to try and force the compiler into submission, which
risks nasty bugs when the compiler is then making assumptions
about the code that are wrong thanks to the fact that it was
lied to with casts.
Well, I did explain the reason for this cast. An
aborting-assertion that discontinues execution (hard kill the
process).
We expect these assertions to never happen. If they do, we don't
really care about any GC or impure things that they do just
before terminating the process.
We don't really want *all* code to be marked gc/impure because it
directly or indirectly uses such assertions.