2#ifndef LIBSBX_UTILITY_FLAGS_HPP_
3#define LIBSBX_UTILITY_FLAGS_HPP_
8namespace sbx::utility {
10template<
typename Enum>
11requires (std::is_enum_v<Enum>)
14template<
typename Enum>
17template<
typename Enum>
18concept bitmask_enum = std::is_enum_v<Enum> && enable_bitmask_operators_v<Enum>;
20template<bitmask_enum Enum>
21constexpr auto operator|(Enum lhs, Enum rhs)
noexcept -> Enum {
22 using underlying_type = std::underlying_type_t<Enum>;
23 return static_cast<Enum
>(
static_cast<underlying_type
>(lhs) |
static_cast<underlying_type
>(rhs));
26template<bitmask_enum Enum>
27constexpr auto operator|=(Enum& lhs, Enum rhs)
noexcept ->
void {
31template<bitmask_enum Enum>
32constexpr auto operator&(Enum lhs, Enum rhs)
noexcept -> Enum {
33 using underlying_type = std::underlying_type_t<Enum>;
34 return static_cast<Enum
>(
static_cast<underlying_type
>(lhs) &
static_cast<underlying_type
>(rhs));
37template<bitmask_enum Enum>
38constexpr auto operator&=(Enum& lhs, Enum rhs)
noexcept ->
void {
Definition: bitmask.hpp:12