From a53dbb695033651a4d7151ccd2a4cfd275023db9 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Sat, 8 Jan 2022 14:34:21 +0100 Subject: [PATCH] registry: deletion policy is checked at runtime for groups since we can change it dynamically now --- src/entt/entity/registry.hpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/entt/entity/registry.hpp b/src/entt/entity/registry.hpp index dc1fb6349..e68994e1b 100644 --- a/src/entt/entity/registry.hpp +++ b/src/entt/entity/registry.hpp @@ -182,13 +182,12 @@ class basic_registry { template struct group_handler, get_t, Owned...> { - // nasty workaround for an issue with the toolset v141 that doesn't accept a fold expression here - static_assert(!std::disjunction_v::in_place_delete>...>, "Groups do not support in-place delete"); std::conditional_t current{}; template void maybe_valid_if(basic_registry &owner, const Entity entt) { [[maybe_unused]] const auto cpools = std::forward_as_tuple(owner.assure()...); + ENTT_ASSERT(((std::get &>(cpools).policy() == deletion_policy::swap_and_pop) && ...), "Groups do not support in-place delete"); const auto is_valid = ((std::is_same_v || std::get &>(cpools).contains(entt)) && ...) && ((std::is_same_v || owner.assure().contains(entt)) && ...) @@ -210,7 +209,10 @@ class basic_registry { if constexpr(sizeof...(Owned) == 0) { current.remove(entt); } else { - if(const auto cpools = std::forward_as_tuple(owner.assure()...); std::get<0>(cpools).contains(entt) && (std::get<0>(cpools).index(entt) < current)) { + const auto cpools = std::forward_as_tuple(owner.assure()...); + ENTT_ASSERT(((std::get &>(cpools).policy() == deletion_policy::swap_and_pop) && ...), "Groups do not support in-place delete"); + + if(std::get<0>(cpools).contains(entt) && (std::get<0>(cpools).index(entt) < current)) { const auto pos = --current; (std::get &>(cpools).swap_elements(std::get &>(cpools).data()[pos], entt), ...); }