On Sunday, 11 March 2012 at 23:54:10 UTC, Walter Bright wrote:
Consider the toHash() function for struct key types:
http://dlang.org/hash-map.html
And of course the others:
const hash_t toHash();
const bool opEquals(ref const KeyType s);
const int opCmp(ref const KeyType s);
They need to be, as well as const, pure nothrow @safe.
The problem is:
1. a lot of code must be retrofitted
2. it's just plain annoying to annotate them
It's the same problem as for Object.toHash(). That was
addressed by making those attributes inheritable, but that
won't work for struct ones.
So I propose instead a bit of a hack. toHash, opEquals, and
opCmp as struct members be automatically annotated with pure,
nothrow, and @safe (if not already marked as @trusted).
A pattern is emerging. Why not analyze it a bit and somehow try
to find a common ground? Then we can generalize it to a single
annotation.