Search code examples
c++templatespartial-specialization

Template template partial specialization failure: "expected a class template"


This example code generates expected a class template, got std::pair <_T1, _T2>. I tried using struct Struct <std::pair> {};, but then parameters T and M become undeducible. How to avoid this?

    template <template <class...> class>
    struct Struct {};

    template <class T, class M>
    struct Struct <std::pair <T, M>> {};

Solution

  • Depending of what you want

    template <template <class...> class>
    struct Struct {};
    
    template <>
    struct Struct <std::pair>
    {
        // Specialization
    };
    

    or

    template <typename> struct Struct {};
    
    template <typename First, typename Second>
    struct Struct <std::pair<First, Second>>
    {
        // Specialization
    };