diff --git a/include/magic_enum.hpp b/include/magic_enum.hpp index a03699b..c368d49 100644 --- a/include/magic_enum.hpp +++ b/include/magic_enum.hpp @@ -169,6 +169,15 @@ template return names; } +template +[[nodiscard]] constexpr decltype(auto) pairs_impl(std::integer_sequence) noexcept { + static_assert(std::is_enum_v, "magic_enum::detail::pairs_impl requires enum type."); + constexpr auto values = values_impl(range_impl()); + constexpr std::array, sizeof...(I)> pairs{{{values[I], name_impl()}...}}; + + return pairs; +} + template using enable_if_enum_t = typename std::enable_if>::type; @@ -307,6 +316,16 @@ template > return names; } + +template > +[[nodiscard]] constexpr decltype(auto) enum_pairs() noexcept { + static_assert(std::is_enum_v, "magic_enum::enum_pairs requires enum type."); + constexpr auto count = detail::values_impl(detail::range_impl()).size(); + constexpr auto pairs = detail::pairs_impl(std::make_index_sequence{}); + + return pairs; +} + namespace ops { template , typename = detail::enable_if_enum_t>