从C++20开始,Std::IsNaN不是ConstExpr。
这有技术上的原因吗?
我能想到的只是它在“C头”中,所以没有人费心去修复它(
处理浮点数的函数是constexpr,但不幸的是numeric_limits
不包含isnan检查)。
答案基本上是“因为提案还没并入标准”
P0533提出了您所要求的内容,但它没有将其转化为C++20。
其中一个阻碍是,也许这个提议有点大…… 允许
或
中的某些函数设置全局错误代码,这会使整个“constexpr
all the things”建议*复杂化
我不认为这些分类功能应该有任何问题; std::IsNaN
及其同级std::FpClassify
被定义为分别与C宏IsNaN
和FpClassify
具有相同的行为。 这将需要稍微改变。
*(旁白:p2043“don'tconstexpr
all the things”在这里是切切相关的,但它只是在谈论元编程)