15 #ifndef ESTD_ENUMCLASSFLAGS_HPP_ 16 #define ESTD_ENUMCLASSFLAGS_HPP_ 18 #include <type_traits> 50 constexpr
typename std::enable_if<estd::isEnumClassFlags<T>{}, T>::type
operator&(
const T& left,
const T& right)
52 using UnderlyingType =
typename std::underlying_type<T>::type;
53 return static_cast<T>(static_cast<UnderlyingType>(left) & static_cast<UnderlyingType>(right));
69 constexpr
typename std::enable_if<estd::isEnumClassFlags<T>{}, T>::type
operator|(
const T& left,
const T& right)
71 using UnderlyingType =
typename std::underlying_type<T>::type;
72 return static_cast<T>(static_cast<UnderlyingType>(left) | static_cast<UnderlyingType>(right));
88 constexpr
typename std::enable_if<estd::isEnumClassFlags<T>{}, T>::type
operator^(
const T& left,
const T& right)
90 using UnderlyingType =
typename std::underlying_type<T>::type;
91 return static_cast<T>(static_cast<UnderlyingType>(left) ^ static_cast<UnderlyingType>(right));
106 constexpr
typename std::enable_if<estd::isEnumClassFlags<T>{}, T>::type
operator~(
const T&
object)
108 using UnderlyingType =
typename std::underlying_type<T>::type;
109 return static_cast<T>(~static_cast<UnderlyingType>(
object));
125 constexpr
typename std::enable_if<estd::isEnumClassFlags<T>{}, T&>::type
operator&=(T& left,
const T& right)
127 return (left = left & right);
143 constexpr
typename std::enable_if<estd::isEnumClassFlags<T>{}, T&>::type
operator|=(T& left,
const T& right)
145 return (left = left | right);
161 constexpr
typename std::enable_if<estd::isEnumClassFlags<T>{}, T&>::type
operator^=(T& left,
const T& right)
163 return (left = left ^ right);
166 #endif // ESTD_ENUMCLASSFLAGS_HPP_ Collection of useful templates.
Definition: DmaChannel.hpp:121
constexpr std::enable_if< estd::isEnumClassFlags< T >{}, T >::type operator~(const T &object)
Bitwise NOT operator.
Definition: EnumClassFlags.hpp:106
constexpr std::enable_if< estd::isEnumClassFlags< T >{}, T & >::type operator^=(T &left, const T &right)
Bitwise XOR assignment operator.
Definition: EnumClassFlags.hpp:161
Tag struct used to enable bitwise operators for selected enum class flags.
Definition: EnumClassFlags.hpp:30
constexpr std::enable_if< estd::isEnumClassFlags< T >{}, T & >::type operator|=(T &left, const T &right)
Bitwise OR assignment operator.
Definition: EnumClassFlags.hpp:143
constexpr std::enable_if< estd::isEnumClassFlags< T >{}, T & >::type operator&=(T &left, const T &right)
Bitwise AND assignment operator.
Definition: EnumClassFlags.hpp:125
constexpr std::enable_if< estd::isEnumClassFlags< T >{}, T >::type operator|(const T &left, const T &right)
Bitwise OR operator.
Definition: EnumClassFlags.hpp:69
constexpr std::enable_if< estd::isEnumClassFlags< T >{}, T >::type operator^(const T &left, const T &right)
Bitwise XOR operator.
Definition: EnumClassFlags.hpp:88
constexpr std::enable_if< estd::isEnumClassFlags< T >{}, T >::type operator &(const T &left, const T &right)
Bitwise AND operator.
Definition: EnumClassFlags.hpp:50