diff --git a/src/entt/core/any.hpp b/src/entt/core/any.hpp index 503a2af43..373881541 100644 --- a/src/entt/core/any.hpp +++ b/src/entt/core/any.hpp @@ -76,8 +76,7 @@ class basic_any { } break; case operation::comp: { - const auto info = type_id(); - auto *value = static_cast(to)->data(&info); + auto *value = static_cast(to)->data(type_id()); if constexpr(!std::is_function_v && !std::is_array_v && is_equality_comparable_v) { return value && (*static_cast(instance) == *static_cast(value)) ? to : nullptr; @@ -85,8 +84,10 @@ class basic_any { return (instance == value) ? to : nullptr; } } - case operation::get: - return (!to || (*static_cast(to) == type_id())) ? instance : nullptr; + case operation::get: { + const type_info &info = *static_cast(to); + return (!info || (info == type_id())) ? instance : nullptr; + } case operation::type: *static_cast(const_cast(to)) = type_id(); break; @@ -255,13 +256,13 @@ public: * @param req Optional expected type. * @return An opaque pointer the contained instance, if any. */ - [[nodiscard]] const void *data(const type_info *req = nullptr) const ENTT_NOEXCEPT { - return vtable ? vtable(operation::get, *this, req) : nullptr; + [[nodiscard]] const void *data(const type_info &req = type_info{}) const ENTT_NOEXCEPT { + return vtable ? vtable(operation::get, *this, &req) : nullptr; } /*! @copydoc data */ - [[nodiscard]] void *data(const type_info *req = nullptr) ENTT_NOEXCEPT { - return (!vtable || mode == policy::cref) ? nullptr : const_cast(vtable(operation::get, *this, req)); + [[nodiscard]] void *data(const type_info &req = type_info{}) ENTT_NOEXCEPT { + return (!vtable || mode == policy::cref) ? nullptr : const_cast(vtable(operation::get, *this, &req)); } /** @@ -394,7 +395,7 @@ Type any_cast(basic_any &&data) ENTT_NOEXCEPT { template const Type *any_cast(const basic_any *data) ENTT_NOEXCEPT { const auto info = type_id>>(); - return static_cast(data->data(&info)); + return static_cast(data->data(info)); } /*! @copydoc any_cast */ @@ -402,7 +403,7 @@ template Type *any_cast(basic_any *data) ENTT_NOEXCEPT { const auto info = type_id>>(); // last attempt to make wrappers for const references return their values - return static_cast(static_cast, Type> *>(data)->data(&info)); + return static_cast(static_cast, Type> *>(data)->data(info)); } /** diff --git a/src/entt/entity/registry.hpp b/src/entt/entity/registry.hpp index ac0bdcb3d..1b75d5996 100644 --- a/src/entt/entity/registry.hpp +++ b/src/entt/entity/registry.hpp @@ -1577,7 +1577,7 @@ public: const auto info = type_id(); for(const auto &curr: vars) { - if(auto *value = curr.data(&info); value) { + if(auto *value = curr.data(info); value) { return static_cast(value); } } @@ -1594,7 +1594,7 @@ public: const auto info = type_id(); for(auto &curr: vars) { - if(auto *value = curr.data(&info); value) { + if(auto *value = curr.data(info); value) { return static_cast(value); } }