gpt4 book ai didi

c++ - 为什么在部分特化中不能推导从属模板类型?

转载 作者:行者123 更新时间:2023-12-01 15:13:32 24 4
gpt4 key购买 nike

使用clang 7.0.0时,编译此代码会产生以下错误:

template <typename A> class Outer
{
public:
template <typename B> class Inner
{
};
};

template<typename C> struct Foo
{
};

template <typename D, typename E> struct Foo<typename Outer<D>::template Inner<E>>
{
};
 clang++-7 -pthread -std=c++11 -o main main.cpp
main.cpp:15:42: error: class template partial specialization contains template parameters that cannot be
deduced; this partial specialization will never be used [-Wunusable-partial-specialization]
template <typename D, typename E> struct Foo<typename Outer<D>::template Inner<E>>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:15:20: note: non-deducible template parameter 'D'
template <typename D, typename E> struct Foo<typename Outer<D>::template Inner<E>>
^
main.cpp:15:32: note: non-deducible template parameter 'E'
template <typename D, typename E> struct Foo<typename Outer<D>::template Inner<E>>
^

MSVC提供了类似的错误。

为什么D和E不可推论?

最佳答案

在模板参数推导期间,部分特化模板参数中范围解析运算符::左侧的所有内容都是非推导上下文,这意味着出现在此处的模板参数不会从特化的相应参数中推导。

此外,如果合格类型名称的一部分是非推导上下文,则用于指定类型的所有参数都是非推导的。

因此,在您的示例中,既没有从D推导出E也没有从typename Outer<D>::template Inner<E>推导出来,并且由于没有其他推论方法,推论失败了,这意味着部分特化永远都不可行。

关于c++ - 为什么在部分特化中不能推导从属模板类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60013483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com