繁体   English   中英

格式错误的模板部分特化

[英]ill-formed template partial specialization

我正在试验模板部分专业化,我得到了以下代码。

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 似乎抱怨模板参数在这种情况下不可推导。 但是,永远不应该匹配部分专业化。 因此,每个专业化都将依赖于主要模板定义。


我在规范中找不到禁止这样做的部分。

template <typename T>
struct Y<typename X<T>::type> {};

不比主类模板更专业。

template <typename T>
struct Y {};

换句话说,它接受主类模板接受的同一组类型,而不是它的子集。 规范中的确切条款。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM