Hi all, How does this work, with respect to overloading?
auto memo(alias Fn, TParams...)(TParams args) if (isCallable!(Fn)) { static typeof(Func(args))[Tuple!(TParams)] cache; auto key = tuple(args); return key in cache ? cache[key] : (cache[key] = Func(args)); } uint fib(uint n) { return n > 1 ? memo!(fib)(n - 1) + memo!(fib)(n - 2) : n; } ulong fib(ulong n) { return n > 1 ? memo!(fib)(n - 1) + memo!(fib)(n - 2) : n; } void main() { memoize(&fib); std.stdio.writefln("%d", fib(50)); } It seems like it's fixed, right?