22 #include <type_traits> 37 template<
typename Enum>
40 using value_type =
typename std::underlying_type<Enum>::type;
43 : flag_value{flag_value} {}
44 constexpr
Flags(Enum flag_value) noexcept
45 : flag_value{
static_cast<value_type>(flag_value)} {}
65 flag_value |= other.flag_value;
71 flag_value &= other.flag_value;
77 flag_value ^= other.flag_value;
83 return flag_value == other.flag_value;
95 template<
typename Enum>
101 template<
typename Enum>
104 return Flags<Enum>(flags.value() |
static_cast<decltype(flags.
value())
>(e));
107 template<
typename Enum>
110 return static_cast<Enum
>(flags.value() &
static_cast<decltype(flags.
value())
>(e));
113 template<
typename Enum>
116 return static_cast<Enum
>(flags.value() &
static_cast<decltype(flags.
value())
>(e));
119 template<
typename Enum>
122 return e ==
static_cast<Enum
>(flags.value());
125 template<
typename Enum>
128 return e ==
static_cast<Enum
>(flags.value());
131 template<
typename Enum>
134 return e ==
static_cast<Enum
>(flags.value() &
static_cast<decltype(flags.
value())
>(e));
139 template<
typename Enum>
141 operator|(Enum lhs, Enum rhs) noexcept
146 template<
typename Enum>
148 operator&(Enum lhs, Enum rhs) noexcept
154 template<
typename Enum>
156 operator^(Enum lhs, Enum rhs) noexcept
Definition: as_render_target.h:27
constexpr Flags(value_type flag_value=0) noexcept
Definition: flags.h:42
constexpr Flags< Enum > operator^(Flags< Enum > other) const noexcept
Definition: flags.h:57
Flags< Enum > operator &=(Flags< Enum > other) noexcept
Definition: flags.h:69
constexpr value_type value() const noexcept
Definition: flags.h:86
Flags< Enum > operator^=(Flags< Enum > other) noexcept
Definition: flags.h:75
typename std::underlying_type< DeviceCapability >::type value_type
Definition: flags.h:40
constexpr Flags< Enum > operator|(Flags< Enum > other) const noexcept
Definition: flags.h:47
constexpr bool operator==(Flags< Enum > other) const noexcept
Definition: flags.h:81
constexpr Flags(Enum flag_value) noexcept
Definition: flags.h:44
constexpr Flags< Enum > operator &(Flags< Enum > other) const noexcept
Definition: flags.h:52
constexpr bool contains(Flags< Enum > flags, Enum e) noexcept
Definition: flags.h:132
Flags< Enum > & operator|=(Flags< Enum > other) noexcept
Definition: flags.h:63