6#include <initializer_list>
18 template<
typename TEnum>
19 requires std::is_enum_v<TEnum>
31 constexpr Flags(std::initializer_list<TEnum> flags)
40 return !
static_cast<bool>(*this);
43 explicit constexpr operator bool ()
const
69 const auto unsigned_val =
static_cast<std::make_unsigned_t<underlying_type>
>(value_);
87 return static_cast<bool>(*
this &
flag);
114 template<
class TEnum>
115 requires std::is_enum_v<TEnum>
118 return e.underlying_value();
123struct std::hash<
osc::Flags<T>> final {
126 return inner_hasher_(flags.underlying_value());
129 std::hash<typename osc::Flags<T>::underlying_type> inner_hasher_{};
constexpr Flags with(TEnum flag) const
Definition flags.h:75
constexpr bool operator!() const
Definition flags.h:38
constexpr Flags & operator|=(const Flags &rhs)
Definition flags.h:60
std::underlying_type_t< TEnum > underlying_type
Definition flags.h:22
static constexpr Flags from_underlying(underlying_type v)
Definition flags.h:24
constexpr bool get(TEnum flag) const
Definition flags.h:85
constexpr Flags(TEnum flag)
Definition flags.h:30
constexpr TEnum lowest_set() const
Definition flags.h:66
constexpr Flags(std::initializer_list< TEnum > flags)
Definition flags.h:31
constexpr underlying_type underlying_value() const
Definition flags.h:103
constexpr Flags with_flag_values_swapped(TEnum flag0, TEnum flag1) const
Definition flags.h:95
constexpr void set(TEnum flag, bool v)
Definition flags.h:90
constexpr Flags()=default
constexpr Flags without(TEnum flag) const
Definition flags.h:80
friend constexpr Flags operator&(const Flags &lhs, const Flags &rhs)
Definition flags.h:50
friend constexpr Flags operator|(const Flags &lhs, const Flags &rhs)
Definition flags.h:55
friend constexpr bool operator==(const Flags &, const Flags &)=default
Definition custom_decoration_generator.h:5
constexpr auto to_underlying(const Flags< TEnum > &e) noexcept
Definition flags.h:116
constexpr U to(T &&value)
Definition conversion.h:56
size_t operator()(const osc::Flags< T > &flags) const noexcept
Definition flags.h:124