| 1021 | return static_cast<T>(static_cast<U>(a) ^ static_cast<U>(b)); |
| 1022 | } |
| 1023 | template<class T> constexpr T enum_bit_not(T a) noexcept |
| 1024 | { |
| 1025 | static_assert(std::is_enum<T>::value, "must be enum"); |
| 1026 | using U = typename std::underlying_type<T>::type; |
| 1027 | return static_cast<T>(~static_cast<U>(a)); |
| 1028 | } |
| 1029 | } // namespace detail |
| 1030 | |
| 1031 | // partially satisfies named requirement BitmaskType |