stlab-enum-ops 1.1.0
Type-safe operators for enums
|
Bitwise operations for bitmask-enabled enums. More...
Functions | |
template<class T> | |
constexpr auto | operator& (T lhs, T rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T > |
Bitwise AND for bitmask-enabled enums; returns the same enum type. | |
template<class T> | |
constexpr auto | operator~ (T a) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T > |
Bitwise NOT for bitmask-enabled enums; returns the same enum type. | |
template<class T> | |
constexpr auto | operator| (T lhs, T rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T > |
Bitwise OR for bitmask-enabled enums. | |
template<class T> | |
constexpr auto | operator^ (T lhs, T rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T > |
Bitwise XOR for bitmask-enabled enums. | |
template<class T> | |
constexpr auto | operator<< (T lhs, std::size_t rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T > |
Left shift for bitmask-enabled enums. | |
template<class T> | |
constexpr auto | operator>> (T lhs, std::size_t rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T > |
Right shift for bitmask-enabled enums. | |
template<class T> | |
constexpr auto | operator^= (T &lhs, T rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T & > |
XOR-assign for bitmask-enabled enums. | |
template<class T> | |
constexpr auto | operator&= (T &lhs, T rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T & > |
AND-assign for bitmask-enabled enums. | |
template<class T> | |
constexpr auto | operator|= (T &lhs, T rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T & > |
OR-assign for bitmask-enabled enums. | |
template<class T> | |
constexpr auto | operator<<= (T &lhs, std::size_t rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T & > |
Left shift-assign for bitmask-enabled enums. | |
template<class T> | |
constexpr auto | operator>>= (T &lhs, std::size_t rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T & > |
Right shift-assign for bitmask-enabled enums. | |
template<class T, class U> | |
constexpr auto | operator- (T lhs, U rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T > &&stlab::is_compatible_scalar< U, T >, T > |
Subtracts a 0 or 1 scalar value from a bitmask-enabled enum. Allows expressions like e & (e - 1) to clear the least set bit. | |
template<class T> | |
constexpr auto | operator- (std::nullptr_t lhs, T rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T >, T > |
Subtracts a bitmask-enabled enum from 0 0 - rhs is equivalent to -rhs. | |
template<class T, class U> | |
constexpr auto | operator+ (T lhs, U rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T > &&stlab::is_compatible_scalar< U, T >, T > |
Adds a 0 or 1 scalar value to a bitmask-enabled enum. Allows expressions like e & (e + 1) to clear trailing set bits. | |
template<class U, class T> | |
constexpr auto | operator+ (U lhs, T rhs) -> std::enable_if_t< stlab::has_enabled_bitmask< T > &&stlab::is_compatible_scalar< U, T >, T > |
Adds a bitmask-enabled enum to 0 or 1. Allows expressions like e & (1 + e) to clear trailing set bits. |
Bitwise operations for bitmask-enabled enums.
These operations are available when you enable bitmask operations by defining: