However, the current resultant of substr as an lvalue, whilst predictable, is so twisted, and has so many edge cases, I find it inconceivable that anyone has actually found a reasonable use for the current behaviour, much less constructed an application that relies upon it.
Considering that 4-arg substr is a relative new invention
(5.004? 5.005?), there must have been a lot of code that
uses the lvalue-ness of substr. substr has never surprised me, but then, I've never used the 3-arg form in both rvalue
and lvalue context at the same time, nor have I ever used
4-arg substr as an rvalue.
I'm not really convinced this issue is worth breaking
backwards compatibility for. No doubt there is code right
now that depends on this behaviour - and if the current
behaviour confuses you, don't use it. Write it in two lines.
Abigail