gets(), exception specifications, semantic corrections for a couple of cases like decltype vs auto, auto original meaning, std::bind(), and several others
However they don't play a Python 3, and rather take the effort to minimize the impact of those changes.
C++ has opted to avoid those struggles by never removing features; you can disagree with that decision but it was done for good reasons.
The register keyword issue crops up because legacy code included and linked to modern C++ will occasionally have the word "register" affixed to a loop variable. Generally speaking, once you change standards, there is room to drop the old stuff. It's just gradual. Static analyzers do a lot to modernize code now too, so the situation is not as painful as it used to be.
[0] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p188...
This statement does not do justice to the process that led to the renaming of "Perl 6" to "The Raku Programming Language". If you are interested in the process, https://github.com/Raku/problem-solving/issues/81 will give you some of the discussion that happened online.
New code doesn't have to use old features.
Yeah but it's hard to manage in multiple ways. Is there good tooling to help? And it means a lot of references you could normally check are using features you can't use.
Plus none of your libraries are going to agree on what parts to use.
That's named evolving and improving. And that's how a language stay alive.