Also, what exactly is wrong with this code? private import std.range; void filter(R)(R, bool delegate(ElementType!R)) { } void main() { [1, 2, 3].filter(delegate bool(x) { return x < 3; }); }