inout(T)[] overlap(T)(inout(T)[] r1, inout(T)[] r2)
Might be nice if inout applied to template parameter types: T[] overlap(inout T)(T[] r1, T[] r2);If it wasn't for the virtual function issue, I wonder if inout would still be needed on runtime arguments given the above feature?
Using traits like CopyConstness might be enough.
