From 2c145826a35d0059b79688c7a8aaae1aaeec7f42 Mon Sep 17 00:00:00 2001 From: Yutao Yuan Date: Mon, 2 May 2022 11:58:51 +0000 Subject: [PATCH] Fix type parameter name conflicts of derive(Bundle) (#4636) # Objective This code currently fails to compile with error ``the name `T` is already used for a generic parameter in this item's generic parameters``, because `T` is also used in code generated by `derive(Bundle)`. ```rust #[derive(Bundle)] struct MyBundle { component: T, } ``` ## Solution Add double underscores to type parameter names in `derive(Bundle)`. --- crates/bevy_ecs/macros/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/bevy_ecs/macros/src/lib.rs b/crates/bevy_ecs/macros/src/lib.rs index db89637f23..99a03fd854 100644 --- a/crates/bevy_ecs/macros/src/lib.rs +++ b/crates/bevy_ecs/macros/src/lib.rs @@ -156,9 +156,9 @@ pub fn derive_bundle(input: TokenStream) -> TokenStream { } #[allow(unused_variables, unused_mut, non_snake_case)] - unsafe fn from_components(ctx: &mut T, mut func: F) -> Self + unsafe fn from_components<__T, __F>(ctx: &mut __T, mut func: __F) -> Self where - F: FnMut(&mut T) -> #ecs_path::ptr::OwningPtr<'_> + __F: FnMut(&mut __T) -> #ecs_path::ptr::OwningPtr<'_> { Self { #(#field_from_components)*