Почему деление нуля с плавающей запятой запрещено в constexpr?C++

Программы на C++. Форум разработчиков
Anonymous
Почему деление нуля с плавающей запятой запрещено в constexpr?

Сообщение Anonymous »

При использовании компилятора g++ оба они компилируются нормально:

Код: Выделить всё

constexpr double d1 = 2.0 / 1.0;
const double d2 = 2.0 / 0.0;
Но это не так:

Код: Выделить всё

constexpr double d2 = 2.0 / 0.0;
Ошибка времени компиляции:

Код: Выделить всё

error: ‘(2.0e+0 / 0.0)’ is not a constant expression
Обратите внимание, что cppreference приводит именно этот пример, подтверждающий, что это запрещено.
Я не понимаю, почему это запрещено. Учитывая, что std::numeric_limits::is_iec559 — это constexpr, компилятор четко знает во время компиляции, внутри constexpr, разрешено ли деление на ноль. Итак, если это разрешено... почему это не разрешено в constexpr?

Подробнее здесь: https://stackoverflow.com/questions/786 ... -constexpr

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