Почему std::nextafter не является постоянным выражением?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему std::nextafter не является постоянным выражением?

Сообщение Anonymous »


Why code bellow has no problem with a2 but does not compile for z1?

#include // std::nextafter #include // std::numeric_limits int main () { constexpr float a1 {1.f}; constexpr float a2 {std::nextafter(a1, std::numeric_limits::max())}; constexpr float z0 {0.f}; constexpr float z1 {std::nextafter(z0, std::numeric_limits::max())}; return 0; } Compiled with GCC 13.2

In file included from :1: /opt/compiler-explorer/gcc-13.2.0/include/c++/13.2.0/cmath: In function 'int main()': :9:39: in 'constexpr' expansion of 'std::nextafter(((float)z0), std::numeric_limits::max())' /opt/compiler-explorer/gcc-13.2.0/include/c++/13.2.0/cmath:2417:32: error: '__builtin_nextafterf(0.0f, 3.40282347e+38f)' is not a constant expression 2417 | { return __builtin_nextafterf(__x, __y); } So GCC compiled a2 correctly but is unable to compile z1.

Note: Clang 14.0 and MSVC 19.38 have problems even with a2.


Источник: https://stackoverflow.com/questions/780 ... expression
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»