On Sat, May 24, 2014 at 06:05:49PM -0700, Steven Schveighoffer via Digitalmars-d wrote: > On Sat, 24 May 2014 02:54:01 -0700, FG <[email protected]> wrote: [...] > >Really? Then what does TypeInfo.compare(void*, void*) use? For > >example here: > > > > auto key_hash = keyti.getHash(pkey); Entry *e; > > /* ... */ > > if (key_hash == e.hash) { > > auto c = keyti.compare(pkey, e + 1); > > if (c == 0) goto Lret; > > } > > You know what, you are right. I assumed it used keyti.equals. This is > a bug imo, since opCmp will be used, and opEquals will be ignored. > Just checking for opCmp == 0 is identical to opEquals, except some > types can define opEquals but not opCmp. > > But I don't know if it will get fixed. The whole AA runtime has to be > redone at some point. [...]
This has been argued over in a druntime pull before. I'm 100% for changing the above line (and all other instances of it) to use keyti.equals() instead. But that was shot down due to potential breakage of existing code. :-( :-( Nevermind the fact that it probably breaks a lot more *new* code than it ever will break old code... :-( It's been far too long that AA's have been broken in druntime. Somebody should just take the aaA.d out in the back and shoot it, and replace it with a better implementation. I think users will be far happier with that. T -- Trying to define yourself is like trying to bite your own teeth. -- Alan Watts
