Как предупредить при назначении или выполнении арифметики с различными типами перечислений в GCC?

Пока я знаю, что это действительно C, чтобы не различать типы перечислений.

GCC имеет -Wenum-compare (который я использую) и работает как ожидалось.

Я попытался использовать -Wconversion, но это не имеет никакого значения.

Как задания и арифметические операторы (+/-/&/|... и т.д.) также генерируют предупреждения? (назначение, или и... и т.д.)

{
    enum Foo f = SOME_VALUE;
    enum Bar b = SOME_OTHER_VALUE;

    if (f != b) {
        /* this warns! */
    }

    f = b;  /* <-- how to warn about this? */
    f |= b;  /* .. and this? */

}

Примечания:

  • Переключение на С++ не является вариантом (как предложено в других ответах).
  • Этот вопрос тесно связан, однако его не дубликат, потому что он касается передачи аргументов вместо арифметики.

Ответы

Ответ 1

В соответствии с этим ответом только clang поддерживает желаемое поведение.

Есть некоторые подходы для эмуляции строго типизированных перечислений в C, но они, похоже, имеют различные ограничения.