//edition:2018 #![feature(type_alias_impl_trait)] pub trait Foo { type X: std::future::Future; fn x(&self) -> Self::X; } pub struct F; impl Foo for F { type X = impl std::future::Future; fn x(&self) -> Self::X { async {} } }