What features of C++ should be avoided in embedded systems?
Please classify the answer by reason such as:
time functions are usually OS dependent (unless you rewrite them). Use your own functions (especially if you have a RTC)
templates are ok to use as long as you have enough space for code - othwerise don't use them
exceptions are not very portable also
printf functions that don't write to a buffer are not portable (you need to be somehow connected to the filesystem to write to a FILE* with printf). Use only sprintf, snprintf and str* functions (strcat, strlen) and of course their wide char corespondents (wcslen...).
If speed is the problem maybe you should use your own containers rather than STL (for example the std::map container to make sure a key is equal does 2 (yes 2) comparisons with the 'less' operator ( a [less than] b == false && b [less than] a == false mean a == b ). 'less' is the only comparison parameter received by the std::map class (and not only). This can lead to some performance loss in critical routines.
templates, exceptions are increasing the code size (you can be sure of this). sometimes even performance is affected when having a larger code.
memory allocation functions probably need to be rewritten also because they are OS dependent in many ways (especially when dealing with thread safety memory allocation).
malloc uses the _end variable (declared usually in the linker script) to allocate memory but this is not thread safe in "unknown" environments.
sometimes you should use Thumb rather than Arm mode. It can improve performance.
So for 64k memory I would say that C++ with some of its nice features (STL, exceptions etc) can be overkill. I would definitely choose C.