模板模板部分专业化失败:"expected a class template"

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

此示例代码生成 expected a class template, got std::pair <_T1, _T2>。我尝试使用 struct Struct <std::pair> {};,但随后参数 TM 变得不可推导。如何避免这种情况?

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

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

这不是您模板的有效专业化。

原因是因为 std::pair<T, M> 是 class 模板 std::pair 的完全专业化,因此是 class。您的模板需要一个 class 模板参数,这正是编译器告诉您的内容。

看你想要什么

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

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

template <typename> struct Struct {};

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