compile-time cost of alias templates

Jonathan Wakely jwakely.gcc@gmail.com
Sun Dec 18 16:01:00 GMT 2011


I don't know the G++ internals well enough to find this out for
myself, so I hope Dodji or Jason can answer the question below.

Currently in <functional> we have this helper class to constrain the
std::bind function template via SFINAE:

  template<typename _Tp>
    class __is_socketlike
    {
      typedef typename decay<_Tp>::type _Tp2;
    public:
      static const bool value =
        is_integral<_Tp2>::value || is_enum<_Tp2>::value;
    };

I was going to replace the static member with:
      static const bool value = __or_<is_integral<_Tp2>, is_enum<_Tp2>>::value;

But now that we have alias templates I'm wondering if it would be
better to write it as:

  template<typename _Tp>
    using __is_socketlike
      = __or_<is_integral<typename decay<_Tp>::type>,
              is_enum<typename decay<_Tp>::type>>;


Does the implementation in G++ mean that using an alias template
avoids instantiating the separate __is_socketlike class template, or
is there just as much cost in instantiating an alias template as a
class template?

It's probably not a big deal in this specific case, but I'd like to
know whether in general there's an advantage to using an alias
template instead of declaring a new class template.

Thanks for any insight.



More information about the Libstdc++ mailing list