toHash => pure, nothrow, const, @safe

deadalnix deadalnix at gmail.com
Mon Mar 12 04:11:58 PDT 2012


Le 12/03/2012 00:54, Walter Bright a écrit :
> 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).

I don't really see the point. For Objects, we inherit from Object, which 
can define theses.

For struct, we have inference, so most of the time attributes will 
correct. const pure nothrow @safe are something we want, but is it 
something we want to enforce ?


More information about the Digitalmars-d mailing list