MSVC 2015无法编译Constexpr Atan

MSVC 2015 cannot compile constexpr atan

本文关键字:Constexpr Atan 编译 2015 MSVC      更新时间:2023-10-16

我在项目中使用了Mingw-w64编译器。现在,我正在用MSVC2015编译该项目。以下行给出了一个错误:

constexpr double pi = 4*std::atan(1);

错误:

error: C2131: expression did not evaluate to a constant

但是,它在mingw中没有任何问题。

MSVC在这种情况下是正确的,来自[constexpr.functions] p1

本文档明确要求某些标准库功能为constexpr。实现不得声明任何标准库函数签名为constexpr,除非明确要求。

您可以从我突出显示的最后一句话中看到,如果标准不这么说,则不允许实现函数constexpr

现在标准是否说atanconstexpr?不,从[C.Math]中的签名中可以看出:

float atan(float x);  // see [library.c]
double atan(double x);