diff --git a/include/magic_enum.hpp b/include/magic_enum.hpp index bec4c10..ded34cc 100644 --- a/include/magic_enum.hpp +++ b/include/magic_enum.hpp @@ -212,18 +212,14 @@ template inline constexpr bool is_scoped_enum_v = is_scoped_enum::value; // Obtains enum value from enum string name. -template > +template , typename D = std::decay_t> [[nodiscard]] constexpr std::optional enum_cast(std::string_view value) noexcept { - using D = std::decay_t; - return detail::enum_cast_impl(value); } // Obtains enum value from integer value. -template > +template , typename D = std::decay_t> [[nodiscard]] constexpr std::optional enum_cast(std::underlying_type_t value) noexcept { - using D = std::decay_t; - if (detail::name_impl(static_cast(value)).empty()) { return std::nullopt; // Invalid value or out of range. } else { @@ -232,36 +228,32 @@ template > } // Returns enum value at specified index. No bounds checking is performed: the behavior is undefined if index >= number of enum values. -template> +template, typename D = std::decay_t> [[nodiscard]] constexpr E enum_value(std::size_t index) { - using D = std::decay_t; - constexpr auto values = detail::values_impl(detail::range_impl()); + constexpr auto values = detail::values_impl(detail::range_impl()); return assert(index < values.size()), values[index]; } // Obtains value enum sequence. -template > +template , typename D = std::decay_t> [[nodiscard]] constexpr decltype(auto) enum_values() noexcept { - using D = std::decay_t; - constexpr auto values = detail::values_impl(detail::range_impl()); + constexpr auto values = detail::values_impl(detail::range_impl()); return values; } // Returns number of enum values. -template > +template , typename D = std::decay_t> [[nodiscard]] constexpr std::size_t enum_count() noexcept { - using D = std::decay_t; - constexpr auto count = detail::values_impl(detail::range_impl()).size(); + constexpr auto count = detail::values_impl(detail::range_impl()).size(); return count; } // Obtains string enum name from enum value. -template > +template , typename D = std::decay_t> [[nodiscard]] constexpr std::optional enum_name(E value) noexcept { - using D = std::decay_t; const auto name = detail::name_impl(static_cast(value)); if (name.empty()) { @@ -272,10 +264,9 @@ template > } // Obtains string enum name sequence. -template > +template , typename D = std::decay_t> [[nodiscard]] constexpr decltype(auto) enum_names() noexcept { - using D = std::decay_t; - constexpr auto count = detail::values_impl(detail::range_impl()).size(); + constexpr auto count = detail::values_impl(detail::range_impl()).size(); constexpr auto names = detail::names_impl(std::make_index_sequence{}); return names; @@ -283,9 +274,8 @@ template > namespace ops { -template > +template , typename D = std::decay_t> std::ostream& operator<<(std::ostream& os, E value) { - using D = std::decay_t; const auto name = detail::name_impl(static_cast(value)); if (!name.empty()) { @@ -295,10 +285,8 @@ std::ostream& operator<<(std::ostream& os, E value) { return os; } -template > +template , typename D = std::decay_t> std::ostream& operator<<(std::ostream& os, std::optional value) { - using D = std::decay_t; - if (value.has_value()) { const auto name = detail::name_impl(static_cast(value.value())); if (!name.empty()) {