我正在尝试在类中初始化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
函数。