I wonder if instead of assuming that the only "upgrade" from C is straight to C++ with all of its attendant baggage, may be what's needed is C with traits/templates and strict macros.
In other words, extend C in the same direction Rust took, but while retaining 100% backwards compatibility. Just adding traits and hygienic macros would make C much safer and ergonomic, while compiling down to normal C.
Basically what Arduino, Espressif, Google, Apple, Microsoft, IBM and ARM are perfectly confortable defining their C++ subsets for drivers and bare metal development.
In other words, extend C in the same direction Rust took, but while retaining 100% backwards compatibility. Just adding traits and hygienic macros would make C much safer and ergonomic, while compiling down to normal C.
Just a thought...