【发布时间】:2018-11-11 06:41:18
【问题描述】:
#include <complex>
struct S
{
static std::complex<double> constexpr c;
};
gcc 生成错误,因为缺少初始化程序。 Clang 和 MSVC 不会产生错误。
据我所知,一个 constexpr 静态数据成员必须有一个初始化程序,即使它是具有可以不带参数调用的构造函数的类类型(如本例所示)。不幸的是,我没有最新的 C++ 标准来支持我的假设。
所以正确的代码应该用构造函数初始化,例如:
struct S
{
static std::complex<double> constexpr c {};
};
谁能证明哪个编译器是对的,哪个是错的?
【问题讨论】:
标签: c++ gcc visual-c++ clang language-lawyer