diff --git a/src/entt/entity/group.hpp b/src/entt/entity/group.hpp index 3a43df298..85015b37f 100644 --- a/src/entt/entity/group.hpp +++ b/src/entt/entity/group.hpp @@ -105,28 +105,29 @@ template class group_handler, get_t, exclude_t> final: public group_descriptor { using entity_type = typename Type::entity_type; - template - void swap_elements(const std::size_t pos, const entity_type entt, std::index_sequence) { - (pools[Index]->swap_elements(pools[Index]->data()[pos], entt), ...); + void swap_elements(const std::size_t pos, const entity_type entt) { + for(std::size_t next{}; next < sizeof...(Owned); ++next) { + pools[next]->swap_elements(pools[next]->data()[pos], entt); + } } void push_on_construct(const entity_type entt) { if(std::apply([entt, pos = len](auto *cpool, auto *...other) { return cpool->contains(entt) && !(cpool->index(entt) < pos) && (other->contains(entt) && ...); }, pools) && std::apply([entt](auto *...cpool) { return (!cpool->contains(entt) && ...); }, filter)) { - swap_elements(len++, entt, std::index_sequence_for{}); + swap_elements(len++, entt); } } void push_on_destroy(const entity_type entt) { if(std::apply([entt, pos = len](auto *cpool, auto *...other) { return cpool->contains(entt) && !(cpool->index(entt) < pos) && (other->contains(entt) && ...); }, pools) && std::apply([entt](auto *...cpool) { return (0u + ... + cpool->contains(entt)) == 1u; }, filter)) { - swap_elements(len++, entt, std::index_sequence_for{}); + swap_elements(len++, entt); } } void remove_if(const entity_type entt) { if(pools[0u]->contains(entt) && (pools[0u]->index(entt) < len)) { - swap_elements(--len, entt, std::index_sequence_for{}); + swap_elements(--len, entt); } }