Sure, from the compiler authors perspective, the current behavior of signed integers in C++ is ideal. Since overflow is undefined behavior, for them it is optimization opportunities. They can do all sorts of optimizations thanks to being able to assume that overflow does not happen.
But from the perspective of software developers, the undefined behavior in signed overflow is danger.
That leads to one of the strongest arguments in favor of unsigned: at least, that has well-defined (wrapping) overflow behavior. That might be 'broken', but it isn't nearly as dangerous as the undefined behavior of signed overflow!
The point I want to make is: compiler users (us, here) and compiler authors have inherently different, sometimes conflicting, agenda.
Again --- not advocating for unsigned indices! Just saying it's not clear-cut either way.
Benoit