- no exceptions
- no recursion
- no malloc()/free() in the inner-loop
- no exceptions
- no recursion
- no malloc()/free() in the inner-loop
You can compile with exceptions enabled, use the STL, but strictly enforce no allocations after initialization. It depends on how strict is the spec you are trying to hit.
Provocative talk though, it upends one of the pillars of deeply embedded programming, at least from a size perspective.
- C++ Exceptions Reduce Firmware Code Size, ACCU [1]
- C++ Exceptions for Smaller Firmware, CppCon [2]
So, what exact parts of the STL do you use in your code base? Most be mostly compile time stuff (types, type trait, etc).
I mean .at is great and all, but it's really for the benefit of eliminating undefined behavior and if the program just terminates then you've achieved this. I've seen decoders that just catch the std::out_of_range or even std::exception to handle the remaining bugs in the logic, though.