From b6743e4a26933a78135e647531e63a43e1827150 Mon Sep 17 00:00:00 2001 From: neargye Date: Sun, 16 Aug 2020 11:00:31 +0500 Subject: [PATCH] workaround enum_type_name --- include/magic_enum.hpp | 8 ++++++++ test/test.cpp | 2 -- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/include/magic_enum.hpp b/include/magic_enum.hpp index 02db031..4853ad2 100644 --- a/include/magic_enum.hpp +++ b/include/magic_enum.hpp @@ -274,6 +274,7 @@ constexpr std::uint8_t log2(T value) noexcept { return log2(static_cast(value)); } else { + static_assert(std::is_integral_v, "magic_enum::detail::log2 requires integral type."); auto ret = std::uint8_t{0}; for (; value > static_cast(1); value >>= static_cast(1), ++ret) {}; @@ -288,6 +289,8 @@ constexpr bool is_pow2(T x) noexcept { return is_pow2(static_cast(x)); } else { + static_assert(std::is_integral_v, "magic_enum::detail::is_pow2 requires integral type."); + return x != 0 && (x & (x - 1)) == 0; } } @@ -595,7 +598,12 @@ template [[nodiscard]] constexpr std::string_view enum_type_name() noexcept { using D = std::decay_t; static_assert(std::is_enum_v, "Requires enum type."); +#if defined(_MSC_VER) + // TODO: https://github.com/Neargye/nameof/issues/22 + constexpr std::string_view name = std::string_view{detail::type_name_v}.substr(5, detail::type_name_v.size() - 5); +#else constexpr std::string_view name = detail::type_name_v; +#endif static_assert(name.size() > 0, "Enum type does not have a name."); return name; diff --git a/test/test.cpp b/test/test.cpp index 5cdddf4..671fb84 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -571,14 +571,12 @@ TEST_CASE("type_traits") { REQUIRE_FALSE(is_scoped_enum_v); } -/* TODO: https://github.com/Neargye/nameof/issues/22 TEST_CASE("enum_type_name") { REQUIRE(enum_type_name() == "Color"); REQUIRE(enum_type_name() == "Numbers"); REQUIRE(enum_type_name() == "Directions"); REQUIRE(enum_type_name() == "number"); } -*/ #if defined(MAGIC_ENUM_SUPPORTED_ALIASES) TEST_CASE("aliases") {