diff --git a/pin-project-internal/src/pin_project/derive.rs b/pin-project-internal/src/pin_project/derive.rs index b1fd1baa..56a3d474 100644 --- a/pin-project-internal/src/pin_project/derive.rs +++ b/pin-project-internal/src/pin_project/derive.rs @@ -973,7 +973,7 @@ impl<'a> Context<'a> { // this 'public' type by creating this type in the inside of `const`. #vis struct #struct_ident #proj_generics #where_clause { __pin_project_use_generics: ::pin_project::__private::AlwaysUnpin< - #lifetime, (#(#type_params),*) + #lifetime, (#(::pin_project::__private::PhantomData<#type_params>),*) >, #(#fields,)* diff --git a/src/lib.rs b/src/lib.rs index 6bac6b1f..a9329068 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -222,7 +222,7 @@ pub mod __private { #[doc(hidden)] pub struct AlwaysUnpin<'a, T: ?Sized>(PhantomData<&'a ()>, PhantomData); - impl Unpin for AlwaysUnpin<'_, T> {} + impl Unpin for AlwaysUnpin<'_, T> {} // This is an internal helper used to ensure a value is dropped. #[doc(hidden)] diff --git a/tests/sized.rs b/tests/sized.rs new file mode 100644 index 00000000..9fd7e2ba --- /dev/null +++ b/tests/sized.rs @@ -0,0 +1,13 @@ +#![warn(rust_2018_idioms, single_use_lifetimes)] +#![allow(dead_code)] + +use pin_project::pin_project; + +#[pin_project] +struct Foo<'a, I: ?Sized, Item> +where + I: Iterator, +{ + iter: &'a mut I, + item: Option, +}