提问者:小点点

为什么std::isnan不是constexpr?


从C++20开始,Std::IsNaN不是ConstExpr。

这有技术上的原因吗?

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


共1个答案

匿名用户

答案基本上是“因为提案还没并入标准”

P0533提出了您所要求的内容,但它没有将其转化为C++20。

其中一个阻碍是,也许这个提议有点大…… 允许中的某些函数设置全局错误代码,这会使整个“constexprall the things”建议*复杂化

我不认为这些分类功能应该有任何问题; std::IsNaN及其同级std::FpClassify被定义为分别与C宏IsNaNFpClassify具有相同的行为。 这将需要稍微改变。

*(旁白:p2043“don'tconstexprall the things”在这里是切切相关的,但它只是在谈论元编程)