为什么 std::isnan 不是 constexpr?

Why is std::isnan not constexpr?

自 C++20 起 std::isnan 不是 constexpr。

这有技术原因吗?

我能想到的是它在“C 头文件”中,所以没有人费心去修复它(<limits> 处理浮点数的函数是 constexpr,但不幸的是 numeric_limits 不包含 isnan 检查).

答案基本上是“因为提案尚未合并到标准中”

P0533 提出您要问的问题,它没有进入 C++20。

其中一个障碍是,也许这个提议有点大...... <cmath><cstdlib> 中的某些功能允许设置全局错误代码,这使整个复杂化“ constexpr所有的东西”提案*

我认为这些分类函数应该没有任何问题; std::isnan 及其兄弟 std::fpclassify 被定义为分别与 C 宏 isnanfpclassify 具有相同的行为。这需要稍微改变一下。


*(旁白:p2043“不要constexpr所有的东西”在这里无关紧要,但它只是在谈论元编程)