我正在使用与 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 中的不同结果,这让我去别处询问。
关于C++17 static 和 constexpr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50396274/