"Avoidiing all the footguns," that is quite a claim Tom! You really stand by that?
Have they done anything about the totally random static initialization and deinitialization in C++? That blew up in my face on multiple ocassions. A problem completely fixed in languages like Swift, Go and Zig.
Write some constructors and destructors using global static initialized and deinitialized objects. See how that goes when those are global as well. Sure... you may say nobody would be stupid enough to do that... except in very large software you easily end up with that istuation indirectly. Object of type D, may use global object of type C, and you think you are find because you never make an global static object fo type D. Except global static object A, creates an object B, which after some refactoring holds an object of type D. Oops!
Not to mention the problem of calling virtual methods in constructors. Again you may not directly do that, but it can happen indirectly after a larger class gets refactored.
How about delete [] and delete? I seem to remember this being an important distinction. If you accidentally get it wrong, nobody tells you about it. Except when you make a random change in a 10 year old code base and the undefined behavior from using delete [] somewhere else rears its ugly head.
The for(i=0; n; ++i) example is a footgun and it is still not fixed as far as I know. Honestly I don't think very many footguns have been fixed. I am more inclined to believe they have simply added more of them, crowding out the good old footguns.