Every modern language support OOP, asyn, and exceptions. So what is the point? Maybe not RUST and C, but why would I use them?
C++ does not have to be bare metal. You can chose. But you get very unhelpful error messages and crashing compilers because of the many possibilities in C++. Also C++ has some specs which do not allow it to run on full speed on some processors (DEC alpha, Intel Itanium and maybe others). That spec is internal to the virtual machine in C# / Java and can be adjusted to the underlying hardware. Also these languages allow for self modifying code (managed by the runtime), which C++ cannot allow. So C# can be faster. It is not suitable for small routines which are loaded only once in a while. Loading is slow, scaling in server applications is slow.