Код: Выделить всё
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
Я не понимаю, почему это запрещено. Учитывая, что std::numeric_limits::is_iec559 — это constexpr, компилятор четко знает во время компиляции, внутри constexpr, разрешено ли деление на ноль. Итак, в случае, если это разрешено... почему это не разрешено в constexpr?
EDIT: было предложено, чтобы этот вопрос аналогичен поведению деления с плавающей запятой на ноль. Мой вопрос здесь более целенаправленный (почему первые два выражения кажутся разрешенными, а третье — запрещенным)? Ответы на другой вопрос, похоже, не проливают на это света: некоторые ответы подразумевают, что все три выражения являются UB (и, следовательно, запрещены? Не думаю, что я в это верю; но в любом случае в constexpr есть что-то особенное, что, кажется, имеет значение, поэтому этот вопрос сосредоточен на constexpr).
Подробнее здесь: https://stackoverflow.com/questions/786 ... -constexpr