Enumeration logical operators

Every enumeration type E implicitly provides the following predefined logical operators: E operator &(E x, E y); E operator |(E x, E y); E operator ^(E x, E y);
The result of evaluating x op y, where x and y are expressions of an enumeration type E with an underlying type U, and op is one of the logical operators, is exactly the same as evaluating (E)((U)x op (U)y). In other words, the enumeration type logical operators simply perform the logical operation on the underlying type of the two operands.