diff --git a/include/magic_enum.hpp b/include/magic_enum.hpp index 5763df7..e8fb37b 100644 --- a/include/magic_enum.hpp +++ b/include/magic_enum.hpp @@ -442,9 +442,9 @@ constexpr auto n() noexcept { if (name[0] == '(' || name[0] == '-' || (name[0] >= '0' && name[0] <= '9')) { name = string_view{}; } - constexpr auto prefix = n().size() + 2; - if (name.size() >= prefix) { - name.remove_prefix(prefix); + constexpr auto prefix = n().size(); + if (name.size() > prefix && name[prefix] == ':') { + name.remove_prefix(prefix + 2); } #elif defined(__GNUC__) auto name = string_view{__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 1}; @@ -458,17 +458,17 @@ constexpr auto n() noexcept { if (name[0] == '(') { name = string_view{}; } - constexpr auto prefix = n().size() + 2; - if (name.size() >= prefix) { - name.remove_prefix(prefix); + constexpr auto prefix = n().size(); + if (name.size() > prefix && name[prefix] == ':') { + name.remove_prefix(prefix + 2); } #elif defined(_MSC_VER) string_view name; if ((__FUNCSIG__[5] == '_' && __FUNCSIG__[35] != '(') || (__FUNCSIG__[5] == 'c' && __FUNCSIG__[41] != '(')) { name = string_view{__FUNCSIG__ + 35, sizeof(__FUNCSIG__) - 52}; - constexpr auto prefix = n().size() + 2; - if (name.size() >= prefix) { - name.remove_prefix(prefix); + constexpr auto prefix = n().size(); + if (name.size() > prefix && name[prefix] == ':') { + name.remove_prefix(prefix + 2); } } #else diff --git a/test/test.cpp b/test/test.cpp index 0d811f4..986c6d8 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -449,6 +449,11 @@ TEST_CASE("enum_count") { } +enum lt1 { s1, loooooooooooooooooooong1 }; +enum lt2 : unsigned { s2, loooooooooooooooooooong2 }; +enum class lt3 { s3, loooooooooooooooooooong3 }; +enum class lt4 : unsigned { s4, loooooooooooooooooooong4 }; + TEST_CASE("enum_name") { SECTION("automatic storage") { constexpr Color cr = Color::RED; @@ -487,6 +492,16 @@ TEST_CASE("enum_name") { REQUIRE(enum_name(static_cast(0)).empty()); REQUIRE(enum_name(MaxUsedAsInvalid::ONE) == "ONE"); + + + REQUIRE(enum_name(lt1::s1) == "s1"); + REQUIRE(enum_name(lt1::loooooooooooooooooooong1) == "loooooooooooooooooooong1"); + REQUIRE(enum_name(lt2::s2) == "s2"); + REQUIRE(enum_name(lt2::loooooooooooooooooooong2) == "loooooooooooooooooooong2"); + REQUIRE(enum_name(lt3::s3) == "s3"); + REQUIRE(enum_name(lt3::loooooooooooooooooooong3) == "loooooooooooooooooooong3"); + REQUIRE(enum_name(lt4::s4) == "s4"); + REQUIRE(enum_name(lt4::loooooooooooooooooooong4) == "loooooooooooooooooooong4"); } SECTION("static storage") {