gpt4 book ai didi

c++ - 模板参数可以同时是 int 和 unsigned long 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:48 24 4
gpt4 key购买 nike

我有以下代码:

#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 被模板化为 intA 被模板化为 size_t,它是一个 unsigned long 我正在使用的两个编译器。

当我使用编译器 1(当前编译器)时,一切都按照我期望的方式编译和工作。当使用编译器 2(我们正在转向的编译器)时,我收到一个编译器错误,指出 B 没有采用 unsigned long 的模板特化 - 它已解释3 作为 unsigned long 因为它需要是 A 的一个,但是对于 B 。修复很明显,- 只需更改 B 也采用 size_t(或更改 A 以采用 int) - 但我想知道按照标准哪个是严格正确的。我的直觉是它是编译器 2(抛出错误的那个)。

最佳答案

来自 [temp.deduct.type]:

If P has a form that contains <i>, and if the type of i differs from the type of the corresponding template parameter of the template named by the enclosing simple-template-id, deduction fails.

A<N>对于 N是一个 int应该推导失败,因为A对应的模板参数实际上是 size_t .这是编译器 #1 错误。

关于c++ - 模板参数可以同时是 int 和 unsigned long 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42558976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com