From 22cffe9d6e094ed5a5ba4d4fb653f781efb73909 Mon Sep 17 00:00:00 2001 From: Nathan Sashihara <21227491+n8sh@users.noreply.github.com> Date: Fri, 3 Aug 2018 19:14:08 -0400 Subject: [PATCH] Set: allow hasher to take arg by ref --- source/tanya/container/set.d | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/tanya/container/set.d b/source/tanya/container/set.d index bd889a1..e5dc2d6 100644 --- a/source/tanya/container/set.d +++ b/source/tanya/container/set.d @@ -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; +}