Steven Schveighoffer wrote:
As long as the spec says changing length may expand the array to hold enough space, the optimizer can't, because the optimization would change the side effects of the function. An optimizer should not change the outcome or side effects of a function. It's not unheard of for an optimizer to eliminate important operations that it thinks are invalid, but in that case, it's a broken optimizer, I don't see why we would add this case.
The optimizer is free to change around implementation-defined-behavior and undefined-behavior. For defined-behavior, it can change things around as long as the observer cannot observe a change.
This point brought up is a non-issue, an optimizer that changes the outcome/side effects of a function is a broken optimizer, end of story.
It can within the constraints of defined-behavior.