C++17 static 和 constexpr

标签 c++ c++17 constexpr

我正在使用与 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/

相关文章:

c++ - 将多字节 ASCII 文字分配给枚举值

c++ - 我们可以在 constexpr 函数中省略局部变量的 const 吗?

c++ - 两次删除函数声明的区别

c# - 我们应该在哪里寻找 C++ 常量? (出现在 MSDN 文档中)

c++ - 在并行算法中使用 ranges::view::iota

c++17 - vector<reference_wrapper> ..事情超出了范围?它是如何工作的?

C++:如何为运行时模板参数创建对象工厂?

c++ - C++中字符串如何分配内存?

c++ 17 filesystem::remove_all 带通配符路径

c++ - 使用 const double* const 作为模板参数 - 代码性能问题