我最近在玩static_asserts。
在我的一项“实验”期间,我注意到std::isnan()
不是constexpr函数,因此无法在编译时求值。(Visual Studio 2017)
现在的问题是,海湾合作委员会如何解决这个问题,是否有技术原因?
一种解决方案是编写std::isnan()
的constexpr版本。
#include <cmath>
constexpr float Value = 5.0f;
// Possible "Fix"
//namespace std
//{
// constexpr bool isnan(const float& V) noexcept
// {
// return V != V; // Dummytest, better would be to check the Bit-Pattern
// }
//}
static_assert(!std::isnan(Value), "Check");
int main()
{
}
在godbolt.org上进行了测试
x86-msvc v19.16->失败
x86-64 gcc 8.3->构建