diff --git a/include/magic_enum.hpp b/include/magic_enum.hpp index 5da2314..04e633a 100644 --- a/include/magic_enum.hpp +++ b/include/magic_enum.hpp @@ -402,19 +402,22 @@ constexpr E value(std::size_t i) noexcept { } } +template +constexpr std::size_t count_true(std::array valid_) noexcept { + auto count_ = std::size_t{0}; + for (std::size_t i_ = 0; i_ < valid_.size(); ++i_) { + if (valid_[i_]) { + ++count_; + } + } + return count_; +} + template constexpr auto values(std::index_sequence) noexcept { static_assert(is_enum_v, "magic_enum::detail::values requires enum type."); constexpr std::array valid{{is_valid(I)>()...}}; - constexpr std::size_t count = [](decltype((valid)) valid_) constexpr noexcept -> std::size_t { - auto count_ = std::size_t{0}; - for (std::size_t i_ = 0; i_ < valid_.size(); ++i_) { - if (valid_[i_]) { - ++count_; - } - } - return count_; - }(valid); + constexpr std::size_t count = count_true(valid); std::array values{}; for (std::size_t i = 0, v = 0; v < count; ++i) {