gpt4 book ai didi

c++ - 为什么我不能使用 msvc 在模板类中声明静态 constexpr 变量?

转载 作者:行者123 更新时间:2023-11-28 04:17:27 25 4
gpt4 key购买 nike

我有一个模板类,我想声明一个与该类相同类型的静态 constexpr 变量。使用 gnu 编译器它工作得很好,但是Microsoft Visual Studio,它不会编译。我是不是做错了什么,开玩笑说 gnu 编译器对我很好,还是 Microsoft 编译器出了问题?我知道我可以修复它,为执行相同操作的函数更改变量,但我很好奇。

template <typename T>
constexpr T One() noexcept { return static_cast<T>( 1 ); }

template <typename T>
struct Test {
T val;

static constexpr Test example{ One<T>() }; // compiles only with gnu
static constexpr Test Example() { return Test{ One<T>() }; } // compiles with both gnu and microsoft
};

给定的错误(Visual Studio 2017)是:

error C2017 : use of undefined type 'Test'

最佳答案

在最后一个 之前,您的 Test 模板类型不完整。

这是 very similar question它添加了第三个编译器。如您所见,答案是 VC++ 和 clang 遵守标准,而 gcc 不遵守。

关于c++ - 为什么我不能使用 msvc 在模板类中声明静态 constexpr 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56297102/

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