Задать вопрос
@Mercury13
Программист на «си с крестами» и не только

Можно ли сделать код, который, если constexpr-выражение true, выдаст предупреждение?

Задача: вывести в лог предупреждение, когда происходит отладка: логирование, имитация редких веток кода и тому подобное.
Для чего? — чтобы программист не пустил в продакшен программу в режиме отладки.

[[maybe_unused, deprecated("DEBUGGING!!")]] inline void dbg() {}

/// [+] simulate changed horizon when actually it did not
constexpr bool SIMULATE_CHANGED_HORIZON = false;
inline bool chgNot(bool x) {
    if constexpr (SIMULATE_CHANGED_HORIZON) {
        dbg();
        return x;
    } else {
        return !x;
    }
}


К сожалению, этот код предупреждает всегда — даже если у нас false и dbg() в неё не вкомпилируется.
  • Вопрос задан
  • 94 просмотра
Подписаться 1 Средний 6 комментариев
Решения вопроса 1
@Mercury13 Автор вопроса
Программист на «си с крестами» и не только
Придумал.

[[maybe_unused]] byte debugWarning = SIMULATE_CHANGED_HORIZON * 1000;


В случае false компиляция пройдёт гладко. В случае true преобразование 1000 → byte выдаст предупреждение.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы