У меня есть функция Assert
, которую я использую для оценки утверждения:
, если предварительное условие не выполняется во время выполнения, эта функция выведет сообщение об ошибке и завершит программу.
если предусловие не выполняется внутри константного выражения, это приведет к ошибке времени компиляции.
Мне бы хотелось, чтобы эта функция также генерировала Ошибка времени компиляции, когда утверждение не выполняется в выражении с постоянной оценкой:
const int a = (Assert(false),0); //generate a runtime error
//=> I would like it generates a compile time error
Я думал об использовании std::is_constant_evaluated
: проводник компилятора
#include <type_traits>
using namespace std;
void runtime_error();
constexpr void compile_time_error(){} //should generates a compile time error
constexpr void Assert(bool value){
if (value) return;
if (is_constant_evaluated())
compile_time_error();
else
runtime_error();
}
void func(){
const int a = (Assert(false),0);
}
Я использую только G CC, я искал встроенную функцию, которая вызывала бы ошибку времени компиляции, и это было бы constexpr, но не нашел ее.
Есть ли хитрость для получения ошибки времени компиляции в выражении, которая может быть оценена как константа?