格式不良的模板部分特化



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

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 {};

换句话说,它接受主类模板接受的类型集合,而不是它的子集。

编辑:

感谢@Jarod42在评论中的澄清,程序是病态的,因为部分专门化的参数是不可演绎的,而不是因为它不是更专门化的。程序在实例化X时失败,而在实例化Y时失败。

相关内容

  • 没有找到相关文章

最新更新