类模板部分专用化的参数列表的限制中是否存在GCC 4.9.1(5.1)错误
Is there a GCC 4.9.1 (5.1) bug in the restrictions for the argument list of a class template partial specialization?
我的GCC 4.9.1没有给出错误:
#include <iostream>
template<typename _Tp, typename... _Args>
struct IsCble { };
template<typename _Tp>
struct IsCble<_Tp> { static constexpr int value {4}; };
int main()
{
std::cout << IsCble<int>::value << std::endl;
return 0;
}
与 GCC 5.1 相同。但他们应该根据:
[温度.class规格] 14.5.5\8.4
— 专业化应比初级专业化 模板。
我认为,在上面的代码中,部分专用化并不比主模板更专业,因为:
[温度扣除类型] 14.8.2.5\9.1
— 如果 P 不包含对应于 A i 然后 Ai 被忽略;
因此,他们似乎忽略了 14.5.5\8.4 并通过以下方式解决了歧义:
[temp.class.spec.match] 14.5.5.1\1
这是通过匹配类模板的模板参数来完成的 专用于部分的模板参数列表 专业化。
它是符合标准的实现 (1.4\8)吗?
省
略的参数应该比空参数包更专业。不同上下文中的同一问题是未决问题的主题:
CWG同意应该接受该示例,并将此案例作为后期决胜局处理,更喜欢省略的参数而不是参数包。
因此,基于标准的当前文本,您是对的,但是当这些规则预计会发生变化时,调整编译器以遵循当前规则几乎没有意义。
相关文章:
- 有了gcc,是否可以链接库,但前提是它存在
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 具有sleep_for和sleep_until功能的 gcc 可能存在的问题
- 这是 GCC 中可能存在的错误吗?
- 为什么 GCC 和 clang 之间编译的 c++17 lambda 存在差异?
- 在 mingw64-gcc 上可能存在可变参数的错误
- 使用成员初始值设定项时 gcc 中可能存在的错误
- 相同的代码在不同的 gcc 编译器中存在巨大的性能差异
- Clang 和 GCC 在使用大括号表示法和initializer_list时在构造函数选择上存在分歧
- Clang和GCC在转换C++17中非类型模板参数的自动说明符中存在分歧
- GCC:当层次结构中存在虚拟继承时,C++11 内联对象初始化(使用 "this")不起作用
- 我如何强制GCC检查前向声明的类的存在
- Kahan求和算法在GCC编译时存在较大的计算错误
- 是否存在GCC错误:默认std :: function
- GCC 4.4.1是否存在错误,因为它不接受ctor初始值设定项中的注入类名
- gcc和clang在constexpr函数上存在分歧
- 类模板部分专用化的参数列表的限制中是否存在GCC 4.9.1(5.1)错误
- wstring 在 gcc/c++ v2.96 上不存在
- c ++ 11 参数包在 Apple LLVM 7.0.0 中存在错误行为,但适用于 GCC-5.1
- "volatile"的定义是否如此不稳定,还是 GCC 存在一些标准合规性问题?