diff --git a/src/entt/meta/factory.hpp b/src/entt/meta/factory.hpp index c1eb22631..deda88292 100644 --- a/src/entt/meta/factory.hpp +++ b/src/entt/meta/factory.hpp @@ -453,9 +453,11 @@ template inline void meta_reset(const id_type id) noexcept { auto &&context = internal::meta_context::from(locator::value_or()); - for(auto it = context.value.begin(); it != context.value.end(); ++it) { + for(auto it = context.value.begin(); it != context.value.end();) { if(it->second->id == id) { it = context.value.erase(it); + } else { + ++it; } } } diff --git a/test/entt/meta/meta_type.cpp b/test/entt/meta/meta_type.cpp index 28b6fd910..f006ac0cc 100644 --- a/test/entt/meta/meta_type.cpp +++ b/test/entt/meta/meta_type.cpp @@ -5,9 +5,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -525,6 +525,16 @@ TEST_F(MetaType, Reset) { ASSERT_TRUE(entt::resolve("clazz"_hs)); } +TEST_F(MetaType, ResetLast) { + auto id = (entt::resolve().cend() - 1u)->second.id(); + + ASSERT_TRUE(entt::resolve(id)); + + entt::meta_reset(id); + + ASSERT_FALSE(entt::resolve(id)); +} + TEST_F(MetaType, ResetAll) { using namespace entt::literals;