使用Clang C ++ 17初始化静态constexpr类成员变量失败

时间:2018-12-05 16:09:36

标签: c++ g++ clang c++17 constexpr

我正在尝试在类中初始化static constexpr变量。当我用Clang(7.0)编译代码时,M_COMPLEX被clang接受,但是M_MY_PI的编译失败。有谁知道为什么这种行为原样? g ++(8.2.0)将成功编译代码。

#include <iostream>
#include <complex>

using namespace std;

class ConstexprTest
{
private:
    static constexpr std::complex<const double> M_COMPLEX{std::complex<double>(-1.0)};
    static constexpr double M_MY_PI{std::acos(-1.0)};
};

int main()
{
    cout << "__cplusplus: " << __cplusplus << endl;
    return 0;
}

acos在标头中声明如下:

inline _GLIBCXX_CONSTEXPR long double
acos(long double __x)
{ return __builtin_acosl(__x); }

因此,应将其定义为constexpr函数。

0 个答案:

没有答案