MSVC 2015无法编译Constexpr Atan
MSVC 2015 cannot compile constexpr atan
我在项目中使用了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
。
现在标准是否说atan
是constexpr
?不,从[C.Math]中的签名中可以看出:
float atan(float x); // see [library.c] double atan(double x);
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 多成员Constexpr结构初始化
- 条件constexpr函数
- constexpr 函数中的非文字(通过 std::is_constant_evaluated)
- Visual C++ constexpr Hints
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么constexpr的性能比正常表达式差
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 为什么std::isnan 不是 constexpr?
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 更多constexpr容器是否需要mark_immutable_if_consexpr
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- constexpr上下文中std::initializer_list的验证
- constexpr构造函数需要常量成员函数时出现问题
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- C++constexpr实现差异
- 添加静态constexpr成员是否会更改结构/类的内存映射
- MSVC 2015无法编译Constexpr Atan