On 2/16/2012 7:52 AM, Timon Gehr wrote:
So imo, making opEquals, opCmp, toHash const pure nothrow @safe is blocked by
properly annotating Phobos as well as the following issues:
Bugs in existing attribute inference:
http://d.puremagic.com/issues/show_bug.cgi?id=7205
http://d.puremagic.com/issues/show_bug.cgi?id=7511
Enhancement required for making templates const correct:
http://d.puremagic.com/issues/show_bug.cgi?id=7521
Yes, I want to get all that fixed.
One reason is memoization, aka lazy initialization, aka logical const. I
don't believe these are worth it. If you must do it inside those
functions (and functions that override them), you're on your own to make
it work right (use unsafe casts, etc.).
It would be helpful if we could add cast(pure) for that purpose. The
documentation could state that cast(pure) is only valid if the behaviour of the
enclosing function still appears to be pure.
cast(pure) sounds like a good idea.