From 08089871aff0a2267b9a849055fe99fe60417de8 Mon Sep 17 00:00:00 2001 From: neargye Date: Thu, 27 Jan 2022 19:33:37 +0200 Subject: [PATCH] enum_range more snifae-friendly --- include/magic_enum.hpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/include/magic_enum.hpp b/include/magic_enum.hpp index 6aea6d8..e4d1243 100644 --- a/include/magic_enum.hpp +++ b/include/magic_enum.hpp @@ -160,6 +160,18 @@ struct has_is_flags : std::false_type {}; template struct has_is_flags::is_flags)>> : std::bool_constant::is_flags)>>> {}; +template +struct range_min : std::integral_constant {}; + +template +struct range_min::min)>> : std::integral_constant::min), customize::enum_range::min> {}; + +template +struct range_max : std::integral_constant {}; + +template +struct range_max::max)>> : std::integral_constant::max), customize::enum_range::max> {}; + struct char_equal_to { constexpr bool operator()(char lhs, char rhs) const noexcept { return lhs == rhs; @@ -390,11 +402,10 @@ constexpr int reflected_min() noexcept { if constexpr (IsFlags) { return 0; } else { - constexpr auto lhs = customize::enum_range::min; + constexpr auto lhs = range_min::value; constexpr auto rhs = (std::numeric_limits::min)(); if constexpr (cmp_less(rhs, lhs)) { - static_assert(!is_valid(0)>(), "magic_enum::enum_range detects enum value smaller than min range size."); return lhs; } else { return rhs; @@ -409,11 +420,10 @@ constexpr int reflected_max() noexcept { if constexpr (IsFlags) { return std::numeric_limits::digits - 1; } else { - constexpr auto lhs = customize::enum_range::max; + constexpr auto lhs = range_max::value; constexpr auto rhs = (std::numeric_limits::max)(); if constexpr (cmp_less(lhs, rhs)) { - static_assert(!is_valid(0)>(), "magic_enum::enum_range detects enum value larger than max range size."); return lhs; } else { return rhs;