diff --git a/src/entt/meta/container.hpp b/src/entt/meta/container.hpp index b2cf06e9a..c8ce8becb 100644 --- a/src/entt/meta/container.hpp +++ b/src/entt/meta/container.hpp @@ -110,13 +110,13 @@ struct basic_meta_associative_container_traits { return true; } - [[nodiscard]] static iterator iter(const meta_ctx &ctx, any &container, const bool as_end) { - if(auto *const cont = any_cast(&container); cont) { + [[nodiscard]] static iterator iter(const meta_ctx &ctx, void *container, const void *as_const, const bool as_end) { + if(auto *const cont = static_cast(container); cont) { return iterator{ctx, std::bool_constant{}, as_end ? cont->end() : cont->begin()}; } - const auto &as_const = any_cast(container); - return iterator{ctx, std::bool_constant{}, as_end ? as_const.end() : as_const.begin()}; + auto *const cont = static_cast(as_const); + return iterator{ctx, std::bool_constant{}, as_end ? cont->end() : cont->begin()}; } [[nodiscard]] static size_type insert_or_erase(any &container, meta_any &key, meta_any &value) { diff --git a/src/entt/meta/meta.hpp b/src/entt/meta/meta.hpp index 0cac5c0c9..2d26340db 100644 --- a/src/entt/meta/meta.hpp +++ b/src/entt/meta/meta.hpp @@ -143,7 +143,7 @@ private: internal::meta_type_node (*value_type_node)(const internal::meta_context &){}; size_type (*size_fn)(const void *) noexcept {}; bool (*clear_fn)(void *){}; - iterator (*iter_fn)(const meta_ctx &, any &, const bool){}; + iterator (*iter_fn)(const meta_ctx &, void *, const void *, const bool){}; size_type (*insert_or_erase_fn)(any &, meta_any &, meta_any &){}; iterator (*find_fn)(const meta_ctx &, void *, const void *, meta_any &){}; any storage{}; @@ -1958,12 +1958,12 @@ inline bool meta_associative_container::clear() { /*! @copydoc meta_sequence_container::begin */ [[nodiscard]] inline meta_associative_container::iterator meta_associative_container::begin() { - return iter_fn(*ctx, storage, false); + return iter_fn(*ctx, storage.data(), std::as_const(storage).data(), false); } /*! @copydoc meta_sequence_container::end */ [[nodiscard]] inline meta_associative_container::iterator meta_associative_container::end() { - return iter_fn(*ctx, storage, true); + return iter_fn(*ctx, storage.data(), std::as_const(storage).data(), true); } /**