Something is amiss with our ARM Linux gcc as there are some C++ features that are missing. I stumbled upon std::to_string() being missing, but I suspect there are more things. Digging a bit, I can see that c++config.h indicates that it thinks a lot of functionality is missing from glibc, which is why these C++ features are disabled.
What gcc wants is some C99 features. It seems to find most of them, except for complex numbers support: > checking for ISO C99 support in <math.h>... yes > ... > checking for ISO C99 support in <complex.h>... no > checking for ISO C99 support in <stdio.h>... yes > checking for ISO C99 support in <stdlib.h>... yes > checking for ISO C99 support in <wchar.h>... yes > checking for fully enabled ISO C99 support... no Looking in the log, there appears to be some missing declarations: > conftest.cpp:74:18: error: 'cabsl' was not declared in this scope > ld = cabsl(tmpld); No idea why. These functions seem to be built in, as I cannot find them in any header.
Debian has apparently also suffered from this bug, with a bit more analysis: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=443234 No fix, unfortunately. It is simply closed with the hope what modern glibc/gcc has resolved the issue.
Found gcc: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39491 And glibc bugs for this as well: https://sourceware.org/bugzilla/show_bug.cgi?id=10103 Upstream fix appears to be this one: https://sourceware.org/git/?p=glibc.git;a=commit;h=998832a46688b9fb3a101eccae77bc45e7c1d7ab
Note the discussion there indicates that this only changes what's seen in the headers. The missing functions have always been available as symbols on libc.so. That means it is safe for us to apply this patch, as it does not modify the actual ABI. The fix is available from glibc 2.15, if we chose to not patch things.