// check-pass use std::fmt::Debug; use std::marker::PhantomData; trait Foo { type Gat<'a>: ?Sized where Self: 'a; } struct Bar<'a, T: Foo + 'a>(T::Gat<'a>); struct Baz(PhantomData); impl Foo for Baz { type Gat<'a> = T where Self: 'a; } fn main() { let x = Bar::<'_, Baz<()>>(()); let y: &Bar<'_, Baz> = &x; }