Why isn't the totally equivalent operation on `std::vector` valid as well?
Note: an answer such as "this simply wasn't considered when that wording
to [basic.life] was adopted in C++20 (?), LEWG paper please" is
perfectly OK to me. As well as "you're missing this-and-that subclause,
that's why", "implementations are allowed to implement vector with a
prepend optimization", or similar.
Consider a T that is (CopyInsertable,CopyAssignable, and) MoveInsertable but not MoveAssignable. An implementation may choose to shuffle the elements along by destruct-and-move rather than copy assign. Invalidating everything after the insertion point gives greater implementation freedom.