Использование бросания в константспр или постоянную функцию, чтобы создать ошибку времени компиляцииC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Использование бросания в константспр или постоянную функцию, чтобы создать ошибку времени компиляции

Сообщение Anonymous »

Проблема
Использование static_assert для генерации ошибки времени компиляции не всегда проста, поскольку для первого аргумента требуется постоянное выражение. Я обнаружил, что на Stackoverflow, несколько примере, где использовался Throp вместо static_assert :

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

static_assert(,"message");
if () {throw "message";}
Мой вопрос: законно ли делать это внутри constexpr или consteval function.
Например, если я хочу проверить во время компиляции, если какой-то integer положительный (довольно тупой ...) Я могу написать:
CONSTSPEC void checkpos(int x) {
if (x < 0) {
// is this ill-formed, no diagnostic required (when called with a
// negative argument?)
throw "argument must be positive";
}
}

live
, где constspec может быть constexpr или consteval .
с constexpr
https://timsong-cpp.github.io/cppwp/n48 ... onstexpr#6 and also this answer it seems that calling checkpos with a strictly negative argument is ill-formed but no diagnostic is required, letting a compiler do whatever he wants, which would be useless for compile-time error detection.
With Consteval
Я не могу найти слово в стандарте. Должен ли я понять, что тогда любой вызов хорошо сформирован, и передача строго отрицательного аргумента приведет к обязательной ошибке времени компиляции?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... te-compile
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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