Set: allow hasher to take arg by ref

This commit is contained in:
Nathan Sashihara 2018-08-03 19:14:08 -04:00
parent b04928d2c8
commit 22cffe9d6e

View File

@ -154,7 +154,7 @@ struct Range(T)
* hasher = Hash function for $(D_PARAM T).
*/
struct Set(T, alias hasher = hash)
if (is(typeof(hasher(T.init)) == size_t))
if (is(typeof(((T x) => hasher(x))(T.init)) == size_t))
{
private alias HashArray = .HashArray!(hasher, T);
private alias Buckets = HashArray.Buckets;
@ -767,3 +767,9 @@ if (is(typeof(hasher(T.init)) == size_t))
}
testFunc(set);
}
@nogc nothrow pure @safe unittest
{
// Using hasher that takes argument by ref.
Set!(int, (const ref x) => cast(size_t)x) set;
}