我正在使用与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”。
发生了什么事?
答案 0 :(得分:1)
在其他地方发布之后,一位clang开发人员承认这是clang-5 c ++ 17实现中的一个错误,并且已在clang-6中修复。
感谢tkausl最初的评论,其中显示了clang-6和gcc的不同结果,这让我在别处问过。