struct Texture; trait Surface { type TextureIter<'a>: Iterator where Self: 'a; fn get_texture(&self) -> Self::TextureIter<'_>; } trait Swapchain { type Surface<'a>: Surface where Self: 'a; fn get_surface(&self) -> Self::Surface<'_>; } impl<'s> Surface for &'s Texture { type TextureIter<'a> = std::option::IntoIter<&'a Texture>; //~^ ERROR the type fn get_texture(&self) -> Self::TextureIter<'_> { let option: Option<&Texture> = Some(self); option.into_iter() } } impl Swapchain for Texture { type Surface<'a> = &'a Texture; fn get_surface(&self) -> Self::Surface<'_> { self } } fn main() {}