From 032516711334cb51ae3703f24321b6c50f4dfc37 Mon Sep 17 00:00:00 2001 From: neargye Date: Sat, 9 Oct 2021 02:13:00 +0300 Subject: [PATCH] add compile time get value --- include/magic_enum.hpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/magic_enum.hpp b/include/magic_enum.hpp index 85aae45..50506da 100644 --- a/include/magic_enum.hpp +++ b/include/magic_enum.hpp @@ -692,6 +692,16 @@ template } } +// Returns enum value at specified index. +template +[[nodiscard]] constexpr auto enum_value() noexcept -> detail::enable_if_enum_t> { + using D = std::decay_t; + static_assert(detail::count_v > 0, "magic_enum requires enum implementation and valid max and min."); + static_assert(I < detail::count_v, "magic_enum::enum_value out of range."); + + return detail::values_v[I]; +} + // Returns std::array with enum values, sorted by enum value. template [[nodiscard]] constexpr auto enum_values() noexcept -> detail::enable_if_enum_t> { @@ -925,6 +935,16 @@ template } } +// Returns enum-flags value at specified index. +template +[[nodiscard]] constexpr auto enum_value() noexcept -> detail::enable_if_enum_t> { + using D = std::decay_t; + static_assert(detail::count_v > 0, "magic_enum::flags requires enum implementation and valid max and min."); + static_assert(I < detail::count_v, "magic_enum::flags::enum_value out of range."); + + return detail::values_v[I]; +} + // Returns std::array with enum-flags values, sorted by enum-flags value. template [[nodiscard]] constexpr auto enum_values() noexcept -> detail::enable_if_enum_t> {