https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109814
--- Comment #9 from lesto fante <lestofante88 at gmail dot com> --- To be fair I have no idea what would be the impact of removing freestanding, from a quick test does not seems to have a realistic impact. I guess what happen here is that the freestanding option should remove as much as possible, and the -specs=nano.specs should re-enable only the minimum necessary. Seems like the proper way to do so is to just specify -specs=nano.specs, or go full freestanding? My user case is industrial robot that have to be as reliable as possible. Being able to write embedded code using C++ give me RAII, constexpr, templating, function overload, runtime and compile time polymorphism. Generally the manufacturer IDE disable allocation and exception, so I pretty much avoid STL as it is a mine field. In pure freestanding, I would expect smart pointer and at least parts cmath to work; the compiler offer me only the FPU accelerated functionality, and is up to me to implement the remaining. Unofficial AVR-gcc used the trick of making double into float, i would prefer compilation error than those switcheroo under the hoods.