C++ 无法 select 更正部分模板特化

C++ can't select correct partial template specialization

我在部分模板专业化方面遇到问题。

我有这个小助手模板和部分专业化:

template<typename T>
struct ctor_std_vector_get
{
    static_assert(false,"ERROR");
};


template<typename T>
struct ctor_std_vector_get<const std::vector<T>>
{
    static const T& get(const T& x){
        return x;
    }
};

然后,我像这样使用它:

template<typename T>
class container
{
    public:

    container(const std::vector<T>& inp):
    {
        alloc();

        for( const T& t : inp){
            const T& x = ctor_std_vector_get<T>::get(t);
        }
    }
}

但是当我编译时,当我想要部分专业化时,我点击了 static_assert。我想我做错了什么,因为如果部分专业化匹配,它会在基本模板之前被选中。怎么了?

container(const std::vector<T>& inp):
{
    alloc();

    for( const T& t : inp){
        const T& x = ctor_std_vector_get<T>::get(t);
    }
}

假设您将 std::vector<int> 作为参数传递给此函数。

因此,const std::vector<T>& 中的 T 部分将是 int。简单替换。

现在我们已经确定 Tint 替代,您希望 ctor_std_vector_get<T>ctor_std_vector_get<int> 最终使用哪个模板,默认模板,还是专业化?