Because its requirements, chosen by its designer, were misguided and impossible to achieve with a clean, elegant design.
I don't think a clean, elegant design was ever the goal. It was built as a practical set of design compromises to fill the needs of the industry at the time.
The ugly compromise approach set back OO programming momentum, cost millions of person-years of unnecessary debugging effort and allowed many, many continued buffer overflow exploits etc. that ruin the reputation of software in general.
I think it is worth pointing out that there are plenty of languages that took the non-compromising approach and have fallen into obscurity while C++ took off. In the end it was the compromises of C++ that the software industry as a whole actually wanted. C++ for a long time has provided tools such as std::string and std::vector, to mitigate/eliminate the risk of buffer overflow vulnerabilities. The C string functions are terribly designed, but programmers wanted to and chose to continue to use them, that's not the fault of C++.
Personally I'll take the productivity and maintainability of Java/C# over C++ if I can. When I can't though, C++ isn't a bad option. It certainly has its pitfalls/complexity. Some were bad design choices (e.g. exceptions can throw any type). Some were unavoidable (e.g. the interplay of virtual functions/inheritance with in place allocation). Some are technical debt.