|
|
@@ -330,6 +330,7 @@ template<typename Type, typename Policy, typename Candidate, std::size_t... Inde
|
|
|
[[nodiscard]] meta_any meta_invoke(const meta_ctx &ctx, [[maybe_unused]] meta_handle instance, Candidate &&candidate, [[maybe_unused]] meta_any *const args, std::index_sequence<Index...>) {
|
|
|
using descriptor = meta_function_helper_t<Type, std::remove_reference_t<Candidate>>;
|
|
|
|
|
|
+ // NOLINTBEGIN(cppcoreguidelines-pro-bounds-pointer-arithmetic) - waiting for C++20 (and std::span)
|
|
|
if constexpr(std::is_invocable_v<std::remove_reference_t<Candidate>, const Type &, type_list_element_t<Index, typename descriptor::args_type>...>) {
|
|
|
if(const auto *const clazz = instance->try_cast<const Type>(); clazz && ((args + Index)->allow_cast<type_list_element_t<Index, typename descriptor::args_type>>() && ...)) {
|
|
|
return meta_invoke_with_args<Policy>(ctx, std::forward<Candidate>(candidate), *clazz, (args + Index)->cast<type_list_element_t<Index, typename descriptor::args_type>>()...);
|
|
|
@@ -343,15 +344,18 @@ template<typename Type, typename Policy, typename Candidate, std::size_t... Inde
|
|
|
return meta_invoke_with_args<Policy>(ctx, std::forward<Candidate>(candidate), (args + Index)->cast<type_list_element_t<Index, typename descriptor::args_type>>()...);
|
|
|
}
|
|
|
}
|
|
|
+ // NOLINTEND(cppcoreguidelines-pro-bounds-pointer-arithmetic)
|
|
|
|
|
|
return meta_any{meta_ctx_arg, ctx};
|
|
|
}
|
|
|
|
|
|
template<typename Type, typename... Args, std::size_t... Index>
|
|
|
[[nodiscard]] meta_any meta_construct(const meta_ctx &ctx, meta_any *const args, std::index_sequence<Index...>) {
|
|
|
+ // NOLINTBEGIN(cppcoreguidelines-pro-bounds-pointer-arithmetic) - waiting for C++20 (and std::span)
|
|
|
if(((args + Index)->allow_cast<Args>() && ...)) {
|
|
|
return meta_any{ctx, std::in_place_type<Type>, (args + Index)->cast<Args>()...};
|
|
|
}
|
|
|
+ // NOLINTEND(cppcoreguidelines-pro-bounds-pointer-arithmetic)
|
|
|
|
|
|
return meta_any{meta_ctx_arg, ctx};
|
|
|
}
|
|
|
@@ -479,6 +483,7 @@ template<typename Type, typename Policy = as_is_t, typename Candidate>
|
|
|
if constexpr(meta_function_helper_t<Type, Candidate>::is_static || std::is_class_v<std::remove_cv_t<std::remove_reference_t<Candidate>>>) {
|
|
|
return internal::meta_invoke<Type, Policy>(ctx, {}, std::forward<Candidate>(candidate), args, std::make_index_sequence<meta_function_helper_t<Type, std::remove_reference_t<Candidate>>::args_type::size>{});
|
|
|
} else {
|
|
|
+ // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic) - waiting for C++20 (and std::span)
|
|
|
return internal::meta_invoke<Type, Policy>(ctx, *args, std::forward<Candidate>(candidate), args + 1u, std::make_index_sequence<meta_function_helper_t<Type, std::remove_reference_t<Candidate>>::args_type::size>{});
|
|
|
}
|
|
|
}
|