diff --git a/src/entt/entity/view.hpp b/src/entt/entity/view.hpp index fd2b028be..cc84a6ff3 100644 --- a/src/entt/entity/view.hpp +++ b/src/entt/entity/view.hpp @@ -843,6 +843,14 @@ class basic_view, exclude_t<>, std::void_tleading = &elem; } + /** + * @brief Returns a pointer to the underlying storage. + * @return A pointer to the underlying storage. + */ + [[nodiscard]] Get *operator->() const noexcept { + return storage(); + } + /** * @brief Returns the element assigned to the given entity. * @param entt A valid identifier. diff --git a/test/entt/entity/view.cpp b/test/entt/entity/view.cpp index daf052201..f72ffe6d0 100644 --- a/test/entt/entity/view.cpp +++ b/test/entt/entity/view.cpp @@ -531,6 +531,37 @@ TEST(SingleComponentView, Storage) { ASSERT_EQ(cview.storage(), nullptr); } +TEST(SingleComponentView, ArrowOperator) { + entt::registry registry; + const auto entity = registry.create(); + auto view = registry.view(); + auto cview = registry.view(); + + testing::StaticAssertTypeEq()), entt::storage_type_t *>(); + testing::StaticAssertTypeEq()), const entt::storage_type_t *>(); + + ASSERT_TRUE(view); + ASSERT_TRUE(cview); + + ASSERT_NE(view.operator->(), nullptr); + ASSERT_NE(cview.operator->(), nullptr); + + view->emplace(entity); + registry.emplace(entity); + + ASSERT_EQ(view.operator->(), ®istry.storage()); + ASSERT_EQ(cview.operator->(), ®istry.storage()); + + ASSERT_EQ(view.operator->(), view.storage()); + ASSERT_EQ(cview.operator->(), cview.storage()); + + view = {}; + cview = {}; + + ASSERT_EQ(view.operator->(), nullptr); + ASSERT_EQ(cview.operator->(), nullptr); +} + TEST(SingleComponentView, SwapStorage) { using namespace entt::literals;