What if we did it so that transient ranges would have to define transient property (as was previously proposed), and isInputRange, isForwardRange and others would get an additional parameter allowTransient. The default value of that argument would be false, so those templates would evaluate to false for transient ranges by default. Then algorithms that can work with transient ranges would use
...
if(isInputRange!(R, true))

instead of

if(isInputRange!R)

The algorithms that don't support transient ranges would not need to be changed. Wrapper ranges such as map's result would define transient property if the wrapped range defines it.

Just to clarify, by "transient ranges would have to define transient property" I meant just that this should be true for transient ranges: is(typeof(R.transient)). So transient could just be an enum. I didn't mean there would be a transient property that would return a transient version of the range.

Reply via email to