Many of these inadvisable semantics are fixable in practice, they are just a default that requires additional effort to minimize or eliminate.
That aside, it isn't that easy to switch languages because C++ is more expressive in a systems context in important ways. Porting existing modern systems C++ to e.g. Rust makes this pretty obvious. (I think porting to Zig would likely be a bit easier but I've never actually tried.)