C++ 模板化派生类的演绎指南中断

C++ 模板化派生类的演绎指南中断,c++,inheritance,template-argument-deduction,C++,Inheritance,Template Argument Deduction,以下是最简单的例子: #include <cstddef> struct base_pod { }; template<typename T, std::size_t N> struct der_pod : public base_pod { T k[N]; }; template<typename T, typename... U> der_pod(T, U...) ->der_pod<std::enable_if

以下是最简单的例子:

#include <cstddef>
struct base_pod
{
};
template<typename T, std::size_t N>
struct der_pod : public base_pod
{
    T k[N];
};
template<typename T, typename... U>
    der_pod(T, U...)
        ->der_pod<std::enable_if_t<(std::is_same_v<T, U> and ...), T>, 1 + sizeof...(U)>;

int main()
{
    der_pod dp {{}, {3, 3} };
}

但是,扣除指南在没有基类的情况下可以正常工作:

template<typename T, std::size_t N>
struct der_pod
{
    T k[N];
};
template<typename T, typename... U>
    der_pod(T, U...)
        ->der_pod<std::enable_if_t<(std::is_same_v<T, U> and ...), T>, 1 + sizeof...(U)>;

int main()
{
    der_pod dp {3, 3};
}
1.后面是什么? 2.如何修复{},{3,3}没有类型并且不允许t和U的演绎

Intead,您可以使用:

template <typename T, std::size_t N>
der_pod(base_pod, const T (&)[N]) -> der_pod<T, N>;

我很困惑。您的第二个案例根本不使用演绎,因为您自己指定了参数。您的第一个案例没有机会使用演绎指南,因为{}和{3,3}没有与T和U匹配的类型。@Quentin抱歉,这是我的错。更新
template <typename T, std::size_t N>
der_pod(base_pod, const T (&)[N]) -> der_pod<T, N>;