https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114181
--- Comment #14 from Jonathan Wakely <redi at gcc dot gnu.org> --- Libc headers define lots of macros, we don't #undef them in C++ headers unless they use the name of a function defined by the C++ library (because C++ says its library functions must be real functions and must not be hidden by macros). If you want to provide an implementation of issubnormal (e.g. as boost::issubnormal) then you need to do: #include <math.h> #undef issubnormal I don't think it's a libstdc++ bug that we don't #undef non-standard macros. It's certainly not a GCC component=c bug that Glibc defines a macro in its <math.h>. So there's no GCC bug here. Like Andrew said, iff we need to define std::issubnormal then we'll #undef it, but we're not going to do that until we need to.