Am Fri, 05 Oct 2012 17:15:44 +0200 schrieb "monarch_dodra" <[email protected]>:
> A good while ago, I ran into some issues regarding output ranges. > (reference > http://forum.dlang.org/thread/[email protected]) > > The gist of the problem is that with "put" an OutputRange that > accepts a T will accept a Range!T, and a Range(Range!T) and a > Range!(Range(Range!T)) add infinitum. > > This all works nice and well, provided the output range does not > ever become empty => is infinite. However, this is currently not > the case, and this code will blow in your face: > > //-------- > auto a = new int[](1); > auto b = new int[](2); > assert(isOutputRange!(typeof(a), typeof(b))); > if(!a.empty) > put(a, b); //Nope > //-------- > auto a = new int[](10); > auto b = new int[][](3, 5); > assert(isOutputRange!(typeof(a), typeof(b))); > if(a.length > b.length) > put(a, b); //Nope > //-------- Couldn't we just fix std.range.put to check for an 'empty' property?
