【发布时间】:2021-12-10 21:30:01
【问题描述】:
我正在尝试模板部分特化,我已经找到了以下代码。
template <typename T>
struct X {
using type = T;
};
template <typename T>
struct Y {};
template <typename T>
struct Y<typename X<T>::type> {};
Clang、GCC 和 MSVC 似乎抱怨模板参数在这种情况下是不可推导出的。但是,不应该匹配部分专业化。因此,每个专业化都将依赖于主模板定义。
我在规范中找不到禁止这样做的部分。
【问题讨论】:
-
typename X<T>::type可以是 any 类型,您不能部分专门化 any 类型。 -
请注意
X<T>::type与T完全相同... -
但是,我在规范中找不到禁止这样做的部分。 1. 打开关于类模板部分专业化的标准部分。 2. 搜索“演绎”。 ...timsong-cpp.github.io/cppwp/n4868/temp.class.spec.match#3
-
@Aconcagua 我认为它涵盖在:timsong-cpp.github.io/cppwp/n4861/temp.class.spec#9.2。
标签: c++ templates language-lawyer template-specialization