ошибка constexpr во время компиляции, но без издержек во время выполнения
Существует хорошо известная хитрость, которая вызывает ошибку времени компиляции при вычисленииconstexpr
функция, делая что-то вроде этого:
constexpr int f(int x) {
return (x != 0) ? x : throw std::logic_error("Oh no!");
}
И если функция используется вconstexpr
контекст вы получите ошибку во время компиляции, еслиx == 0
, Если аргументf
не являетсяconstexpr
однако тогда он выдаст исключение во время выполнения, еслиx == 0
, что не всегда желательно по причинам производительности.
Похож на теориюassert
охраняетсяNDEBUG
Есть ли способ вызвать ошибку времени компиляции сconstexpr
функционировать, но ничего не делать во время выполнения?
Наконец, сделать расслабленнымconstexpr
правила в C ++ 1y (C ++ 14) что-нибудь меняют?