Вопрос < /h1>
возможно ли иметь функцию, которая говорит < /p>
- «Да, это компиляция». static_assert не удастся "
Код: Выделить всё
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(); };
}
Другие ответы
Предлагаемый ответ не помогает, поскольку он не учитывает C ++ 20/23, и он пытается обсудить правильный способ использования Static_assert, что не заинтересован.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ssertfalse
Мобильная версия