C++17 静态和常态

C++17 static and constexpr

本文关键字:常态 静态 C++17      更新时间:2023-10-16

我正在使用 Xcode 9.3 附带的 clang,我试图了解以下结果是否是 C++17 更改的有意部分:

#include <iostream>
template<typename T> struct Test {
static const int TEN;
};
template<typename T> constexpr int Test<T>::TEN = 10;
int main(int argc, const char * argv[]) {
std::cout << Test<int>::TEN << std::endl;
return 0;
}

使用 c++11 或 c++14 编译时,这将打印"10"。 但是,使用 c++17 编译此内容时,这将打印"0"。

这是怎么回事?

在其他地方发布后,一位 clang 开发人员承认这是 clang-5 c++17 实现中的一个错误,并且它在 clang-6 以后得到了修复。

感谢tkausl的最初评论,该评论显示了clang-6和gcc的不同结果,这导致我在其他地方询问。