Почему std :: isnan не constexpr? - PullRequest
6 голосов
/ 09 июля 2020

Начиная с C ++ 20 std :: isnan не является constexpr.

Есть ли для этого техническая причина?

Все, о чем я могу думать, это то, что он находится в "C header ", поэтому никто не потрудился исправить это (<limits> функции, работающие с числами с плавающей запятой, являются constexpr, но, к сожалению, numeric_limits не содержит проверки isnan).

1 Ответ

6 голосов
/ 09 июля 2020

Ответ в основном такой: «Потому что предложение еще не интегрировано в стандарт»

P0533 Предлагает то, о чем вы просите, но не вошло в C ++ 20.

Одна из задержек заключается в том, что, возможно, это предложение немного велико ... некоторым функциям в <cmath> или <cstdlib> разрешено устанавливать глобальные коды ошибок, что усложняет все "constexpr все "предложение" *

Я не думаю, что с этими классификационными функциями должна быть какая-то проблема; std::isnan и его родственник std::fpclassify определены так, чтобы вести себя идентично макросам C isnan и fpclassify соответственно. Это нужно будет немного изменить.

* (кроме: p2043 «Не constexpr все вещи» здесь косвенно уместно, но речь идет только о метапрограммировании)

...