[LLVMdev] Explicit template instantiations in libc++

Justin Bogner mail at justinbogner.com
Tue Aug 12 14:17:19 PDT 2014


Most of libc++ doesn't have explicit template instantiations, which
leads to a pretty significant build time and code size cost when using
libc++, since a large number of common templates will be emitted by the
compiler and coalesced by the linker. Notably, in include/__config, we
have:

    #ifndef _LIBCPP_EXTERN_TEMPLATE
    #define _LIBCPP_EXTERN_TEMPLATE(...)
    #endif

whereas before r189601 this was:

    #define _LIBCPP_EXTERN_TEMPLATE(...) extern template __VA_ARGS__;

This was apparently done to fix http://llvm.org/bugs/show_bug.cgi?id=17027,
but disabling explicit instantiations seems like a pretty big hammer
considering the drawbacks.

I'd like to restore these instantiations. Any thoughts on how to handle
things like pr17027 in a less heavy handed way?



More information about the llvm-dev mailing list