diff --git a/include/magic_enum.hpp b/include/magic_enum.hpp index e8fb37b..10d4008 100644 --- a/include/magic_enum.hpp +++ b/include/magic_enum.hpp @@ -189,6 +189,8 @@ constexpr customize_t enum_type_name() noexcept { return default_tag; } +static_assert(std::is_same_v, "magic_enum::customize requires same string_view::value_type and string::value_type"); + } // namespace magic_enum::customize namespace detail { @@ -294,11 +296,6 @@ constexpr std::size_t find(string_view str, char c) noexcept { } } -template -constexpr std::array, N> to_array(T (&a)[N], std::index_sequence) noexcept { - return {{a[I]...}}; -} - template constexpr bool is_default_predicate() noexcept { return std::is_same_v, std::equal_to> || @@ -589,6 +586,7 @@ constexpr int reflected_max() noexcept { } } +#if defined(__cpp_lib_array_constexpr) && __cpp_lib_array_constexpr >= 201603L template constexpr std::size_t values_count(const bool (&valid)[N]) noexcept { auto count = std::size_t{0}; @@ -600,6 +598,24 @@ constexpr std::size_t values_count(const bool (&valid)[N]) noexcept { return count; } +#else +template +constexpr std::array, N> to_array(T (&a)[N], std::index_sequence) noexcept { + return {{a[I]...}}; +} + +template +constexpr std::size_t values_count(const bool (&valid)[N]) noexcept { + auto count = std::size_t{0}; + for (std::size_t i = 0; i < N; ++i) { + if (valid[i]) { + ++count; + } + } + + return count; +} +#endif template constexpr auto values(std::index_sequence) noexcept { @@ -608,14 +624,22 @@ constexpr auto values(std::index_sequence) noexcept { constexpr std::size_t count = values_count(valid); if constexpr (count > 0) { +#if defined(__cpp_lib_array_constexpr) && __cpp_lib_array_constexpr >= 201603L + std::array values = {}; + +#else E values[count] = {}; +#endif for (std::size_t i = 0, v = 0; v < count; ++i) { if (valid[i]) { values[v++] = value(i); } } - +#if defined(__cpp_lib_array_constexpr) && __cpp_lib_array_constexpr >= 201603L + return values; +#else return to_array(values, std::make_index_sequence{}); +#endif } else { return std::array{}; } diff --git a/include/magic_enum_format.hpp b/include/magic_enum_format.hpp index dd63d90..046d777 100644 --- a/include/magic_enum_format.hpp +++ b/include/magic_enum_format.hpp @@ -37,7 +37,7 @@ #if !defined(MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT) # define MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT 1 # define MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT_AUTO_DEFINE -#endif // MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT +#endif namespace magic_enum::customize { // customize enum to enable/disable automatic std::format @@ -72,7 +72,7 @@ struct std::formatter> && mag } }; -#endif // MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT +#endif #if defined(FMT_VERSION) @@ -99,11 +99,11 @@ struct fmt::formatter> && mag } }; -#endif // FMT_VERSION +#endif #if defined(MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT_AUTO_DEFINE) # undef MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT # undef MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT_AUTO_DEFINE -#endif // MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT_AUTO_DEFINE +#endif #endif // NEARGYE_MAGIC_ENUM_FORMAT_HPP