It's not worth the extra complication. Every algorithm ever written then has to worry about it (though clearly many outside of Phobos wouldn't bother), and it's yet another thing that anyone writing a range-based function has to take into account. Any function which doesn't take it into account will then end up with wrong and bizarre behavior when it's given a range with a transient
front.

My proposal was that for example isInputRange!R wouldn't compile if R was transient. So as long as people used the existing is***Range templates, the code that called an algorithm that only works with non-transient ranges with a transient range wouldn't compile. The functions that do support transient ranges could check for isInputRange!(R, true) instead of checking for isInputRange!R.

To be correct, most range-based functions would have to add template
constraints to block ranges which mark themselves as transient.

If they already use is***Range constraints, they wouldn't have to add anything.

Reply via email to