为什么 std::isnan 不是 constexpr?

NoS*_*tAl 8 c++ constexpr c++20

从 C++20 开始,std::isnan 不是 constexpr。

这有技术原因吗?

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

And*_*dyG 7

答案基本上是“因为提案还没有合并到标准中”

P0533提出了你所问的问题,但它没有进入 C++20。

一个阻碍是,这个提议可能有点大……<cmath><cstdlib>中的一些函数被允许设置全局错误代码,这使整个“constexpr所有事物”提议变得复杂*

我认为这些分类功能应该没有任何问题;std::isnan和它的兄弟std::fpclassify被定义为与 C 宏isnan和 的行为相同fpclassify。这将需要稍微改变。


*(旁白:p2043 “不要把constexpr所有的事情”在这里切切相关,但它只是在谈论元编程)