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