diff --git a/src/entt/entity/registry.hpp b/src/entt/entity/registry.hpp index bfcc446cc..e785ee964 100644 --- a/src/entt/entity/registry.hpp +++ b/src/entt/entity/registry.hpp @@ -660,7 +660,7 @@ public: assert(valid(entity)); if constexpr(sizeof...(Component) == 1) { - return (std::get<1>(pool())->get(entity), ...); + return (std::as_const(*std::get<1>(pool())).get(entity), ...); } else { return std::tuple &...>{get(entity)...}; } @@ -730,7 +730,7 @@ public: assert(valid(entity)); if constexpr(sizeof...(Component) == 1) { - return (std::get<1>(assure())->try_get(entity), ...); + return (std::as_const(*std::get<1>(assure())).try_get(entity), ...); } else { return std::tuple *...>{try_get(entity)...}; } diff --git a/test/entt/entity/registry.cpp b/test/entt/entity/registry.cpp index cea683417..4e724e88b 100644 --- a/test/entt/entity/registry.cpp +++ b/test/entt/entity/registry.cpp @@ -1127,3 +1127,19 @@ TEST(Registry, GetOrAssign) { ASSERT_EQ(registry.get(entity), value); ASSERT_EQ(registry.get(entity), 3); } + +TEST(Registry, Constness) { + entt::registry<> registry; + + ASSERT_TRUE((std::is_same_v({})), int &>)); + ASSERT_TRUE((std::is_same_v({})), std::tuple>)); + + ASSERT_TRUE((std::is_same_v({})), int *>)); + ASSERT_TRUE((std::is_same_v({})), std::tuple>)); + + ASSERT_TRUE((std::is_same_v({})), const int &>)); + ASSERT_TRUE((std::is_same_v({})), std::tuple>)); + + ASSERT_TRUE((std::is_same_v({})), const int *>)); + ASSERT_TRUE((std::is_same_v({})), std::tuple>)); +}