dabitude
We would not accept being treated like this as adults, but yet we have no problems putting our kids through this.
To avoid crashing, the caller has to validate the parameters before calling the constructor, and handle the invalid parameters at this time rather than in the exception handler, but in the end it's the same.
From there, maybe you could use C++ features to improve the speed (and then C++ is faster) or you could not (and then they have the same speed).
In the last example (which is actually the most common case in practice), they give wrong instructions. They should only revert the bad commit, not all the following commits. Reverting everything is impractical and useless, and if you want to do that you may as well use revert (which is still a bad idea).
Edit: internet explorer used to do that (https://en.wikipedia.org/wiki/Do_Not_Track#Internet_Explorer...)