C++20 made the switch. See P1236. It appears C23 has followed suit.
> Status-quo If a signed operation would naturally produce a value that is not within the range of the result type, the behavior is undefined. The author had hoped to make this well-defined as wrapping (the operations produce the same value bits as for the corresponding unsigned type), but WG21 had strong resistance against this.
My understanding is that the 2s complement change in C++20 ended up defining bitwise operations but not arithmetic.