38template <
typename T,
typename =
void>
struct isBitset : std::false_type {};
44 , typename
details::make_void<decltype(T::None)>::type
46: std::integral_constant
49 isScopedEnum<T>::value
50 && toUnderlying(T::None) == 0
52 decltype(isBitsetImpl(std::declval<details::BitsetImplTag>(), std::declval<cleanType<T>>()))
53 , std::true_type>::value
58constexpr typename std::enable_if<isBitset<T>::value, T>::type
59 operator| (T lhs, T rhs)
noexcept
61 return static_cast<T
>(toUnderlying(lhs) | toUnderlying(rhs));
65constexpr typename std::enable_if<isBitset<T>::value, T>::type
66 operator& (T lhs, T rhs)
noexcept
68 return static_cast<T
>(toUnderlying(lhs) & toUnderlying(rhs));
72constexpr typename std::enable_if<isBitset<T>::value, T>::type
73operator^ (T lhs, T rhs)
noexcept
75 return static_cast<T
>(toUnderlying(lhs) ^ toUnderlying(rhs));
79constexpr typename std::enable_if<isBitset<T>::value, T>::type
80 operator~ (T t)
noexcept
82 return static_cast<T
>(~toUnderlying(t));
86constexpr typename std::enable_if<isBitset<T>::value, T&>::type
87 operator|= (T& a, T b)
noexcept
93constexpr typename std::enable_if<isBitset<T>::value, T&>::type
94operator^= (T& a, T b)
noexcept
100constexpr typename std::enable_if<isBitset<T>::value, T&>::type
109 return (value & flag) != T::None;
112#define ONIXS_ICEBOE_DEFINE_SET(set) \
113 std::true_type isBitsetImpl(ONIXS_ICEBOE_MESSAGING_NAMESPACE::details::BitsetImplTag, set)
#define ONIXS_ICEBOE_MESSAGING_NAMESPACE_BEGIN
#define ONIXS_ICEBOE_MESSAGING_NAMESPACE_END
std::false_type isBitsetImpl(BitsetImplTag,...)
constexpr std::enable_if< isBitset< T >::value, T & >::type operator&=(T &a, T b) noexcept
constexpr bool hasFlag(T value, T flag, typename std::enable_if< isBitset< T >::value, void * >::type=nullptr) noexcept