Информация об изменениях

Сообщение static_assert в catch секции от 21.12.2024 12:25

Изменено 21.12.2024 13:19 Videoman

static_assert в catch секции
Как известно в С++20 подвезли возможность использовать try catch блоки внутри constexpr выражений. Стало удобно, но появилась следующая проблема:

Есть функция func1(), которая без проблем работает в constexpr режиме и есть внешняя функция func2(), которая никогда не должна выкидывать исключения, которая вызывает внутри себя первую, типа такого:
template<typename...>
inline constexpr bool always_false = false;

template<typename type_t>
constexpr int func2() noexcept
{
  try {
    return func();
  } catch (...) {
    static_assert(always_false<type_t>, "error!");
    return 0;
  }
}

Так вот, стандартный подход с always_false тут не прокатывает и static_assert срабатывает всегда, а мне нужно что бы он срабатывал только если возникло исключение. Как такое можно организовать?
static_assert в catch секции
Как известно в С++20 подвезли возможность использовать try catch блоки внутри constexpr выражений. Стало удобно, но появилась следующая проблема:

Есть функция func1(), которая без проблем работает в constexpr режиме и есть внешняя функция func2(), которая никогда не должна выкидывать исключения, которая вызывает внутри себя первую, типа такого:
template<typename...>
inline constexpr bool always_false = false;

template<typename type_t>
constexpr int func2() noexcept
{
  try {
    return func1();
  } catch (...) {
    static_assert(always_false<type_t>, "error!");
    return 0;
  }
}

Так вот, стандартный подход с always_false тут не прокатывает и static_assert срабатывает всегда, а мне нужно что бы он срабатывал только если возникло исключение. Как такое можно организовать?