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.

Reply via email to