diff --git a/src/entt/meta/meta.hpp b/src/entt/meta/meta.hpp index e7ea9abc6..53508699f 100644 --- a/src/entt/meta/meta.hpp +++ b/src/entt/meta/meta.hpp @@ -340,7 +340,8 @@ public: */ template [[nodiscard]] const Type *try_cast() const { - return static_cast(internal::try_cast(node, internal::resolve_TODO>(), data())); + auto &&context_TODO = internal::meta_context::from(locator::value_or()); + return static_cast(internal::try_cast(node, internal::resolve>(context_TODO), data(), context_TODO)); } /*! @copydoc try_cast */ @@ -349,7 +350,8 @@ public: if constexpr(std::is_const_v) { return std::as_const(*this).try_cast>(); } else { - return static_cast(const_cast(internal::try_cast(node, internal::resolve_TODO(), data()))); + auto &&context_TODO = internal::meta_context::from(locator::value_or()); + return static_cast(const_cast(internal::try_cast(node, internal::resolve(context_TODO), data(), context_TODO))); } } diff --git a/src/entt/meta/node.hpp b/src/entt/meta/node.hpp index aaf0f0b6e..4785d314c 100644 --- a/src/entt/meta/node.hpp +++ b/src/entt/meta/node.hpp @@ -148,16 +148,14 @@ template return value(context); } -[[nodiscard]] inline const void *try_cast(const meta_type_node &from, const meta_type_node &to, const void *instance) noexcept { +[[nodiscard]] inline const void *try_cast(const meta_type_node &from, const meta_type_node &to, const void *instance, const meta_context &context) noexcept { if(from.info && to.info && *from.info == *to.info) { return instance; } if(from.details) { - auto &&context_TODO = meta_context::from(locator::value_or()); - for(auto &&curr: from.details->base) { - if(const void *elem = try_cast(curr.second.type(context_TODO), to, curr.second.cast(instance)); elem) { + if(const void *elem = try_cast(curr.second.type(context), to, curr.second.cast(instance), context); elem) { return elem; } }