The thing is, much of the new stuff is intended to replace old stuff. Modern C++ is a completely different experience than old C++ - actually a much better one imo. But then there are two problems which make things messy:
Lagacy code, where introducing new concepts without updating the older parts increases complexity.
People who don’t know or don’t care and just copy-paste whatever, mixing styles and standards.
In both cases, you end up needing to know how to do things the new way and the old way, while one of which would be sufficient.
There are exceptions of course (try{ pun(); }catch(const NotFunnyException& err){ return NOT_INTENDED;}).
The thing is, much of the new stuff is intended to replace old stuff. Modern C++ is a completely different experience than old C++ - actually a much better one imo. But then there are two problems which make things messy:
In both cases, you end up needing to know how to do things the new way and the old way, while one of which would be sufficient.
There are exceptions of course (
try{ pun(); }catch(const NotFunnyException& err){ return NOT_INTENDED;}
).