// check-pass // edition:2021 #![feature(impl_trait_in_assoc_type)] use std::future::Future; use std::marker::PhantomData; trait Stream { type Item; } struct Empty { _phantom: PhantomData, } impl Stream for Empty { type Item = T; } trait X { type LineStream<'a, Repr>: Stream where Self: 'a; type LineStreamFut<'a, Repr>: Future> where Self: 'a; fn line_stream<'a, Repr>(&'a self) -> Self::LineStreamFut<'a, Repr>; } struct Y; impl X for Y { type LineStream<'a, Repr> = impl Stream; type LineStreamFut<'a, Repr> = impl Future>; fn line_stream<'a, Repr>(&'a self) -> Self::LineStreamFut<'a, Repr> { async { Empty { _phantom: PhantomData } } } } fn main() {}