https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127339
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Nikolas Klauser from comment #2) > May I ask why that is? There are clear compile time benefits, and I don't > really see the issue with allowing mangling them. Because it means they become part of the ABI, so it's not appropriate for the std::lib to use them. And everybody except the std::lib should be using the standard type traits not the built-ins. Libstdc++ doesn't have any _LIBCPP_HIDE_FROM_ABI so using the traits in signatures becomes an ABI artifact, and then the ABI changes based on whether __has_builtin(foo) is true, because the signature changes depending on whether the built-in is used or a fallback definition is used. The type traits class templates are certainly expensive to instantiate, but the variable templates are much cheaper.
