diff --git a/src/entt/entity/component.hpp b/src/entt/entity/component.hpp index 4d2a8b8c4..d604d21ae 100644 --- a/src/entt/entity/component.hpp +++ b/src/entt/entity/component.hpp @@ -49,6 +49,13 @@ struct component_traits { static constexpr std::size_t page_size = internal::page_size::value; }; +/** + * @brief Helper variable template. + * @tparam Type Type of component. + */ +template +inline constexpr bool ignore_as_empty_v = (component_traits::page_size == 0u); + } // namespace entt #endif diff --git a/src/entt/entity/storage.hpp b/src/entt/entity/storage.hpp index c33319e12..1923d9a8d 100644 --- a/src/entt/entity/storage.hpp +++ b/src/entt/entity/storage.hpp @@ -743,7 +743,7 @@ private: /*! @copydoc basic_storage */ template -class basic_storage::page_size == 0u>> +class basic_storage>> : public basic_sparse_set::template rebind_alloc> { using alloc_traits = std::allocator_traits; static_assert(std::is_same_v); diff --git a/test/entt/entity/component.cpp b/test/entt/entity/component.cpp index 7df300cc4..06c27d23d 100644 --- a/test/entt/entity/component.cpp +++ b/test/entt/entity/component.cpp @@ -24,6 +24,7 @@ TEST(Component, DefaultParamsEmpty) { static_assert(!traits::in_place_delete); static_assert(traits::page_size == 0u); + static_assert(entt::ignore_as_empty_v); } TEST(Component, DefaultParamsNonEmpty) { @@ -31,6 +32,7 @@ TEST(Component, DefaultParamsNonEmpty) { static_assert(!traits::in_place_delete); static_assert(traits::page_size == ENTT_PACKED_PAGE); + static_assert(!entt::ignore_as_empty_v); } TEST(Component, SelfContained) { @@ -38,6 +40,7 @@ TEST(Component, SelfContained) { static_assert(traits::in_place_delete); static_assert(traits::page_size == 4u); + static_assert(!entt::ignore_as_empty_v); } TEST(Component, TraitsBased) { @@ -45,4 +48,5 @@ TEST(Component, TraitsBased) { static_assert(!traits::in_place_delete); static_assert(traits::page_size == 8u); + static_assert(!entt::ignore_as_empty_v); }