gpt4 book ai didi

c++ - 非类型模板参数类型随机变化

转载 作者:可可西里 更新时间:2023-11-01 15:23:50 26 4
gpt4 key购买 nike

我不确定这是否是一个编译器错误,或者我是否做了一些违反标准的事情导致未定义的行为。这是我的代码:

#include <iostream>
template<auto InputSize, typename SizeType = decltype(InputSize)>
class StaticArray
{
public:
using size_type = SizeType;
using size_type2 = decltype(InputSize);
};

int main()
{
//StaticArray<2, int> s1;
StaticArray<2ull, int> s3;
std::cout << typeid(decltype(s3)::size_type).name() << "\t" << typeid(decltype(s3)::size_type2).name() << "\n";
return 0;
}

如果被注释掉的行保持被注释掉,我得到正确的输出:int unsigned __int64。但是,如果我取消注释该行,我将得到输出 int int。作为引用,我正在 MSVC 2017 v15.9.2 上的 x86 调试中编译它。

最佳答案

这看起来像是一个编译器错误,请参阅 https://godbolt.org/z/k2ng-1 .如果 MSVC 的版本小于或等于 19.16,它就会出现你显示的问题,从 19.20 开始一切正常。

编辑:如果链接在未来中断,请在测试代码下方:

#include <type_traits>

template<auto InputSize, typename SizeType = decltype(InputSize)>
class StaticArray
{
public:
using size_type = SizeType;
using size_type2 = decltype(InputSize);
};

int main()
{
StaticArray<2, int> s1;
StaticArray<2ull, int> s3;

static_assert(std::is_same_v<decltype(s3)::size_type, int>, "ERROR 1");
static_assert(std::is_same_v<decltype(s3)::size_type2, unsigned long long>, "ERROR 2");
}

关于c++ - 非类型模板参数类型随机变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56886605/

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