C++20 Modules now have visibility vs reachability issues, causing significant challenges/complexities, for developers and especially for make/build tools.
C++ templates are either recompiled wherever used of if instantiated to provide an API, then C++ yield the same code duplication that C would, only at least in C, one has control over using CPU techniques to share common code for void*, various integer sizes, simple struct small structs, and perhaps even floats in some cases.
C++ may be like playing tennis with a baseball bat. Yes, you can hit a winner shot but with significant tool complexity and caution required, whereas with C and a bit of lower-level understanding, you can play with finesse and complete control. The knowledge required to control the plethora of knobs with C++ is probably significantly more at this point than the bit of CPU, memory, and hardware knowledge required to code in C and with memory safety. Not to mention compile performance for C is much better! Plus C23 and C2Y provide excellent features. C++ also does have some useful features, e.g. C++20 concepts, but again, the list of scenarios/syntax to avoid in C++ is long indeed.
Overall, OOP as a paradigm can be fine, but as a syntax it must be logically consistent and simply a different but helpful presentation of functional programming. Some OOP languages are better at that than others. Ultimately, functions are the core conceptual foundation, and I view OOP as a presentation layer that can simplify use of datasets with functions and reduce boilerplate.