diff --git a/include/magic_enum/magic_enum.hpp b/include/magic_enum/magic_enum.hpp index 00f8257..c889886 100644 --- a/include/magic_enum/magic_enum.hpp +++ b/include/magic_enum/magic_enum.hpp @@ -172,54 +172,50 @@ static_assert([] { } (), "magic_enum::customize wchar_t is not compatible with ASCII."); namespace customize { - template - struct enum_range; + template + struct enum_range; } namespace detail { - template - constexpr inline std::size_t prefix_length_or_zero = 0; + template + constexpr inline std::size_t prefix_length_or_zero = 0; - template - constexpr inline auto prefix_length_or_zero::prefix_length)>> = std::size_t{ customize::enum_range::prefix_length }; + template + inline auto prefix_length_or_zero::prefix_length)>> = std::size_t{ customize::enum_range::prefix_length }; } - - namespace customize { -template +template struct adl_info_holder { - constexpr static int max = Max; - constexpr static int min = Min; - constexpr static bool is_flags =IsFlags; - constexpr static std::size_t prefix_length = PrefixLength; - - template - constexpr static adl_info_holder minmax() { return {};} - template - constexpr static adl_info_holder flag() { return {};} - template - constexpr static adl_info_holder prefix() { return {};} + constexpr static int max = Max; + constexpr static int min = Min; + constexpr static bool is_flags =IsFlags; + constexpr static std::size_t prefix_length = PrefixLength; + + template + constexpr static adl_info_holder minmax() { return {}; } + + template + constexpr static adl_info_holder flag() { return {}; } + + template + constexpr static adl_info_holder prefix() { return {}; } }; -constexpr adl_info_holder<> adl_info() -{ - return {}; -} +constexpr adl_info_holder<> adl_info() { return {}; } // Enum value must be in range [MAGIC_ENUM_RANGE_MIN, MAGIC_ENUM_RANGE_MAX]. By default MAGIC_ENUM_RANGE_MIN = -128, MAGIC_ENUM_RANGE_MAX = 127. // If need another range for all enum types by default, redefine the macro MAGIC_ENUM_RANGE_MIN and MAGIC_ENUM_RANGE_MAX. // If need another range for specific enum type, add specialization enum_range for necessary enum type. template struct enum_range { - static constexpr int min = MAGIC_ENUM_RANGE_MIN; - static constexpr int max = MAGIC_ENUM_RANGE_MAX; + static constexpr int min = MAGIC_ENUM_RANGE_MIN; + static constexpr int max = MAGIC_ENUM_RANGE_MAX; }; template -struct enum_range -: decltype(magic_enum_define_range_adl(E{})) {}; +struct enum_range : decltype(magic_enum_define_range_adl(E{})) {}; static_assert(MAGIC_ENUM_RANGE_MAX > MAGIC_ENUM_RANGE_MIN, "MAGIC_ENUM_RANGE_MAX must be greater than MAGIC_ENUM_RANGE_MIN."); @@ -318,7 +314,7 @@ class static_str { constexpr std::uint16_t size() const noexcept { return N; } - constexpr operator string_view() const noexcept { return {data(), size()}; } + constexpr string_view str() const noexcept { return string_view(data(), size()); } private: template @@ -343,7 +339,7 @@ class static_str<0> { constexpr std::uint16_t size() const noexcept { return 0; } - constexpr operator string_view() const noexcept { return {}; } + constexpr string_view str() const noexcept { return ""; } }; template > @@ -886,7 +882,7 @@ inline constexpr auto max_v = (count_v > 0) ? static_cast(values_v constexpr auto names(std::index_sequence) noexcept { - constexpr auto names = std::array{{enum_name_v[I]>...}}; + constexpr auto names = std::array{{enum_name_v[I]>.str()...}}; return names; } @@ -898,7 +894,7 @@ using names_t = decltype((names_v)); template constexpr auto entries(std::index_sequence) noexcept { - constexpr auto entries = std::array, sizeof...(I)>{{{values_v[I], enum_name_v[I]>}...}}; + constexpr auto entries = std::array, sizeof...(I)>{{{values_v[I], enum_name_v[I]>.str()}...}}; return entries; } @@ -1334,7 +1330,7 @@ template [[nodiscard]] constexpr auto enum_name() noexcept -> detail::enable_if_t { - constexpr string_view name = detail::enum_name_v, V>; + constexpr string_view name = detail::enum_name_v, V>.str(); static_assert(!name.empty(), "magic_enum::enum_name enum value does not have a name."); return name; @@ -1350,7 +1346,7 @@ template > if (const auto i = enum_index(value)) { return detail::names_v[*i]; } - return {}; + return ""; } // Returns name from enum value.