To shoot fish in a barrel the zero-terminated C strings was made to save one length-prefix byte and has cost the world a bazillion times more than the Y2K problem and every non-C programming language has abandoned it. But okay, that's an inherited problem.
Seriously, where do you see zero-terminated C strings in C++? It's not an inherited problem, it's a compatibility feature when interfacing C code.
My biggest gripe with C++ is that it's an OOP language without an object oriented memory model, unless you religiously follow RAII as a pattern or trace every execution path when the code changes you will have crazy leaks all over as you create and destroy objects.
No, C++ is not an OOP language (it just supports it to some extent), and yes, you need to follow RAII throughout and that's the one single most major strength of the language!
Particularly since there's no major platform pushing it, on Windows it's C#, on Mac/iOS it's Swift and in the enterprise and on Android it's Java, the embedded market is C and the web is pushing Javascript everywhere: But who's pushing for more C++? Almost nobody, as far as I can see.
That's a major point in favor of C++. It won't go away the next year because some company has decided to switch their preferred framework to some new strangely named new thing, or the language somehow gets sold to a megacorp who really does not care about it.
You say it's a language for experts, who can afford an expert for every change? How do you become an expert, if a junior C++ developer will fail spectacularly? What I'm saying is that just because it's challenging doesn't mean you're an expert, it just means you're doing it the hard way.
Not all software needs to be written in C++. But there are a lot of things which can be and are written in C++, including interpreters for all those new fancy languages.