Использование static_assert для генерации ошибки времени компиляции не всегда проста, поскольку для первого аргумента требуется постоянное выражение. Я обнаружил, что на Stackoverflow, несколько примере, где использовался Throp вместо static_assert :
Код: Выделить всё
static_assert(,"message");
if () {throw "message";}
Например, если я хочу проверить во время компиляции, если какой-то 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