25template<fe::BitEnum E>
constexpr auto to_underlying(E e)
noexcept {
return static_cast<std::underlying_type_t<E>
>(e); }
33template<fe::BitEnum E>
constexpr E
operator~(E a)
noexcept {
return static_cast<E
>(
~fe::to_underlying(a)); }
34template<fe::BitEnum E>
constexpr E&
operator|=(E& a, E b)
noexcept {
return a = (a | b); }
35template<fe::BitEnum E>
constexpr E&
operator&=(E& a, E b)
noexcept {
return a = (a & b); }
36template<fe::BitEnum E>
constexpr E&
operator^=(E& a, E b)
noexcept {
return a = (a ^ b); }
39template<fe::BitEnum E>
constexpr bool has_flag(E value, E flag)
noexcept {
return (value & flag) == flag; }
constexpr E operator~(E a) noexcept
constexpr E operator&(E a, E b) noexcept
constexpr E & operator&=(E &a, E b) noexcept
constexpr E & operator|=(E &a, E b) noexcept
constexpr E operator|(E a, E b) noexcept
constexpr E operator^(E a, E b) noexcept
constexpr E & operator^=(E &a, E b) noexcept
constexpr auto to_underlying(E e) noexcept
constexpr bool has_flag(E value, E flag) noexcept