On 02/16/2012 09:35 AM, Walter Bright wrote:
These all need to be:

const pure nothrow @safe

Unless this is done, the utility of const, pure, nothrow and @safe is
rather crippled.

Any reason why they shouldn't be?

The utility of const, pure, nothrow and @safe is already rather crippled when using Phobos. It is a rather small minority of my pure functions that are effectively annotated pure, because most of Phobos is not properly annotated and the inference for templates does not work satisfactorily yet.

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



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.

Reply via email to