Search code examples
c++templatesc++11template-specialization

using template specialization


Usual template structs can be specialized, e.g.,

template<typename T>
struct X{};

template<>
struct X<int>{};

C++11 gave us the new cool using syntax for expressing template typedefs:

template<typename T>
using YetAnotherVector = std::vector<T>

Is there a way to define a template specialization for these using constructs similar to specializations for struct templates? I tried the following:

template<>
using YetAnotherVector<int> = AFancyIntVector;

but it yielded a compile error. Is this possible somehow?


Solution

  • No.

    But you can define the alias as:

    template<typename T>
    using YetAnotherVector = typename std::conditional<
                                         std::is_same<T,int>::value, 
                                         AFancyIntVector, 
                                         std::vector<T>
                                         >::type;
    

    Hope that helps.