Btw, * Limitations: * * These interfaces are not capable of forwarding $(D ref) access to elements. Why not? I can use auto ref to make e.g. an input range interface that can return ref elements: http://codepad.org/kmenIDk7 Why aren't the interfaces defined like that in std.range?