C++ 17 static和constexpr

jtl*_*lim 6 c++ constexpr c++17

我正在使用与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;
}
Run Code Online (Sandbox Code Playgroud)

使用c ++ 11或c ++ 14编译时,会打印"10".但是,用c ++ 17编译它会打印"0".

这是怎么回事?

jtl*_*lim 1

在其他地方发布此内容后,一位 clang 开发人员承认这是 clang-5 c++17 实现中的一个错误,并且在 clang-6 及以后版本中已修复。

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