1
0
Fork 0
mirror of https://github.com/Neargye/magic_enum.git synced 2026-01-10 23:44:29 +00:00

move is_flags to customize::enum_range

force set the enum-flag true or false
This commit is contained in:
neargye 2022-01-27 15:34:05 +02:00
parent a8c9e57fbe
commit 9ed19fb9e9
4 changed files with 22 additions and 17 deletions

View file

@ -142,9 +142,6 @@ constexpr string_view enum_name(E) noexcept {
return {};
}
template <typename E>
struct is_flags_enum : std::false_type {};
} // namespace magic_enum::customize
namespace detail {
@ -157,6 +154,12 @@ struct supported
: std::false_type {};
#endif
template <typename T, typename = void>
struct has_is_flags : std::false_type {};
template <typename T>
struct has_is_flags<T, std::void_t<decltype(customize::enum_range<T>::is_flags)>> : std::bool_constant<std::is_same_v<bool, std::decay_t<decltype(customize::enum_range<T>::is_flags)>>> {};
struct char_equal_to {
constexpr bool operator()(char lhs, char rhs) const noexcept {
return lhs == rhs;
@ -472,14 +475,14 @@ template <typename E, typename U = std::underlying_type_t<E>>
constexpr bool is_flags_enum() noexcept {
static_assert(is_enum_v<E>, "magic_enum::detail::is_flags_enum requires enum type.");
#if defined(MAGIC_ENUM_NO_CHECK_FLAGS)
return customize::is_flags_enum<E>::value;
#else
if constexpr (std::is_same_v<U, bool>) { // bool special case
if constexpr (has_is_flags<E>::value) {
return customize::enum_range<E>::is_flags;
} else if constexpr (std::is_same_v<U, bool>) { // bool special case
return false;
} else if constexpr (customize::is_flags_enum<E>::value) {
return true;
} else {
#if defined(MAGIC_ENUM_NO_CHECK_FLAGS)
return false;
#else
constexpr auto flags_values = values<E, true>();
constexpr auto default_values = values<E, false>();
if (flags_values.size() == 0 || default_values.size() > flags_values.size()) {
@ -492,8 +495,8 @@ constexpr bool is_flags_enum() noexcept {
}
}
return flags_values.size() > 0;
}
#endif
}
}
template <typename E>