From 47bfffc7ccab99397e08bd04eccec074503b2f15 Mon Sep 17 00:00:00 2001 From: skypjack Date: Wed, 10 Sep 2025 19:09:02 +0200 Subject: [PATCH] meta: avoid moving handles if not needed --- src/entt/meta/utility.hpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/entt/meta/utility.hpp b/src/entt/meta/utility.hpp index 3a0b2c03b..1648b011f 100644 --- a/src/entt/meta/utility.hpp +++ b/src/entt/meta/utility.hpp @@ -204,7 +204,7 @@ template } template -[[nodiscard]] meta_any meta_invoke(meta_handle instance, Candidate &&candidate, [[maybe_unused]] meta_any *const args, std::index_sequence) { +[[nodiscard]] meta_any meta_invoke(meta_handle &instance, Candidate &&candidate, [[maybe_unused]] meta_any *const args, std::index_sequence) { using descriptor = meta_function_helper_t>; // NOLINTBEGIN(cppcoreguidelines-pro-bounds-pointer-arithmetic) - waiting for C++20 (and std::span) @@ -354,7 +354,7 @@ template */ template [[nodiscard]] std::enable_if_t, meta_any> meta_invoke(meta_handle instance, Candidate &&candidate, meta_any *const args) { - return internal::meta_invoke(std::move(instance), std::forward(candidate), args, std::make_index_sequence>::args_type::size>{}); + return internal::meta_invoke(instance, std::forward(candidate), args, std::make_index_sequence>::args_type::size>{}); } /** @@ -368,7 +368,7 @@ template */ template [[nodiscard]] std::enable_if_t, meta_any> meta_invoke(meta_handle instance, meta_any *const args) { - return internal::meta_invoke(std::move(instance), Candidate, args, std::make_index_sequence>::args_type::size>{}); + return internal::meta_invoke(instance, Candidate, args, std::make_index_sequence>::args_type::size>{}); } /** @@ -419,7 +419,8 @@ template template [[nodiscard]] meta_any meta_construct(const meta_ctx &ctx, Candidate &&candidate, meta_any *const args) { if constexpr(meta_function_helper_t::is_static || std::is_class_v>>) { - return internal::meta_invoke(meta_handle{meta_ctx_arg, ctx}, std::forward(candidate), args, std::make_index_sequence>::args_type::size>{}); + meta_handle placeholder{meta_ctx_arg, ctx}; + return internal::meta_invoke(placeholder, std::forward(candidate), args, std::make_index_sequence>::args_type::size>{}); } else { meta_handle target{*args}; // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic) - waiting for C++20 (and std::span)