模板参数可以既是 int 又可以是无符号长整型吗?
Can a template parameter be both an int and an unsigned long?
我有以下代码:
#include <iostream>
template<size_t N>
class A
{
};
template<int N, typename T> class B;
template<int N>
class B<N, A<N>>
{
};
int main()
{
B<3, A<3>> b;
return 0;
}
在这里,B
在int
上模板化,而A
在size_t
上模板化,这是我使用的两个编译器的unsigned long
。
当我使用编译器 1(当前编译器)时,一切都按照我期望的方式编译和工作。使用编译器 2(我们正在转向的编译器)时,我收到一个编译器错误,指出B
没有模板专用化,需要unsigned long
- 它将3
解释为unsigned long
,因为它需要是一个用于A
,但随后找不到任何B
。修复是显而易见的,-只需更改B
以采用size_t
(或更改A
以采用int
) - 但我想知道哪个是严格正确的标准。我的直觉是它是编译器 2(抛出错误的那个)。
从 [temp.deduct.type]:
如果
P
具有包含<i>
的表单,并且i
的类型与由封闭的简单模板 id命名的模板的相应模板参数的类型不同,则推导失败。
N
的A<N>
是一个int
应该无法扣除,因为A
对应的模板参数实际上是size_t
。这是一个编译器 #1 错误。
相关文章:
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 将最小值整数转换为无符号长整型
- 如何将小端格式的QByteArray转换为无符号长整型
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 将 BYTE 数组转换为无符号长整型
- 整数溢出 C++ 即使使用“无符号长整型”也是如此
- 模板参数可以既是 int 又可以是无符号长整型吗?
- 用有符号长整型结果减去无符号长整型
- iOS - 隐式转换将整数精度"size_t"(也称为"无符号长整型")丢失为&
- 将字符串存储在无符号长整型的向量中
- 如果我尝试在 c++ 中将大于 pow(2,64)-1 的值分配给无符号长整型怎么办?
- C++:将无符号长整型长整型转换为无符号长整型
- 无法将DWORD转换为无符号长整型
- 无符号长整型VS无符号长型整型
- 如何将SHA1转换为无符号长整型数组[5]
- 如何将 3 个整数连接成无符号长整型
- 将无符号长整整除以无符号长整型的最安全方法
- 将 Const char * 转换为无符号长整型 - strtoul
- 大于无符号长整型的整数类型,以及库