Many embedded developers program in C because they think C++ adds overhead and will not work well for real-time applications. There's some validity to that and understanding how to utilize C++ properly to provide deterministic operation is one aspect. Another is the runtime support, since even the best programmer can run amok with a non-real-time runtime that's typical for many run-of-the-mill C++ development platforms.
Segger's emRun++ is a standard C++ runtime library optimized for gcc/LLVM-based toolchains, including their own, that's designed for real-time embedded systems. The runtime supports the C++ standards and C++ 17. Its dynamic memory/heap management is deterministic unlike most typical C++ library implementations. The emRun library is designed to support C applications.
I talked with Segger's Dirk Akemann about how they implemented some of their real-time C++ support. We also discussed embOS RTOS. The runtime system works on bare metal as well as any RTOS like embOS. Check out C++ real-time allocation - a chess engine for additional details on the company's real-time heap-management system.