Известный трюк, вызывающий ошибку времени компиляции при оценке функции 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
правила в С++ 1y (С++ 14) что-нибудь измените?