MISRA C++ 2008, 4-5-2 гласит: выражения с типом enum не должны использоваться в качестве операндов для встроенных операторов, кроме оператора нижнего индекса [ ], оператора присваивания =, операторов равенства == и !=, унарный оператор & и операторы отношения ‹, ‹=, ›, ›=.
Если можно использовать и почему нельзя использовать бинарный | с перечислениями?