Search code examples
c++templatesgeneric-programming

template template total specialization


A template template specification is like this:

template < template < class > class T >
struct MyTemplate
{
};

How am I supposed to create a total (or partial) specialization for this template? Is this possible?


Solution

  • Like this:

    #include <iostream>
    
    template <typename T>
    struct foo{};
    
    template <typename T>
    struct bar{};
    
    template < template < class > class T >
    struct MyTemplate
    {
        static const bool value = false;
    };
    
    template <>
    struct MyTemplate<bar>
    {
        static const bool value = true;
    };
    
    
    int main(void)
    {
        std::cout << std::boolalpha;
        std::cout << MyTemplate<foo>::value << std::endl;
        std::cout << MyTemplate<bar>::value << std::endl;
    }