It's a game of complexity management, in the end there were two strategies
- C# -> Absorb the creativity of chip designers in bytecode.
- C++ -> Absorb the creativity of chip designers in template code.
E.g. Common Lisp or Ada; it depends on which C++ version you compare, because if you measure e.g. specification size, then there can be a factor two between versions.