Проверьте во время выполнения, что функция вызывает вызов `static_assert (false)`C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проверьте во время выполнения, что функция вызывает вызов `static_assert (false)`

Сообщение Anonymous »

У меня есть функция шаблона с несколькими параметрами типа, и в зависимости от этих типов функция «вызывает» antatic_assert (false) . Я хочу знать, когда мой код не может компилироваться для конкретных комбинаций параметров типа во время выполнения . Я не хочу просто позволять компилятору не скомпилировать код, а скорее я хочу знать, что во время выполнения. < /P>
Вопрос < /h1>
возможно ли иметь функцию, которая говорит < /p>
  • «Да, это компиляция». static_assert не удастся "
All, пока компилятор успешно компиляции компиляции, даже биты, которые, как говорит функция, не должны компилировать?

Код: Выделить всё

template 
constexpr void problematic_code()
{
if constexpr (std::is_integral_v) {
static_assert(false, "This code should not compile!");
}
}
< /code>
Код не компилируется, когда я пишу любое из следующих < /p>
problematic_code();
problematic_code();
// ...
< /code>
Это нормально! Но есть ли какой-либо механизм в C ++ 20/23, который я могу использовать для написания такой функции, как
template 
constexpr bool will_problematic_code_compile() {
if (calling problematic_code() reaches static_assert(false)) {
return false;
}
return true;
}
< /code>
Тогда я хотел бы написать тест, такой как < /p>
TEST_CASE("") {
CHECK(not will_problematic_code_compile());
CHECK(not will_problematic_code_compile());
CHECK(will_problematic_code_compile());
}
Я попробовал, требуется ,

Код: Выделить всё

template 
constexpr bool will_problematic_code_compile()
{
return requires { problematic_code(); };
}
Но это всегда возвращает true.
Другие ответы
Предлагаемый ответ не помогает, поскольку он не учитывает C ++ 20/23, и он пытается обсудить правильный способ использования Static_assert , что меня не интересует.

Подробнее здесь: https://stackoverflow.com/questions/796 ... ssertfalse
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»