29 lines
510 B
Rust
29 lines
510 B
Rust
|
#![feature(type_alias_impl_trait)]
|
||
|
// edition:2021
|
||
|
// check-pass
|
||
|
|
||
|
struct Pending {}
|
||
|
|
||
|
struct CantOpen {}
|
||
|
|
||
|
trait AsyncRead {}
|
||
|
|
||
|
impl AsyncRead for i32 {}
|
||
|
|
||
|
type PendingReader<'a> = impl AsyncRead + 'a;
|
||
|
|
||
|
type OpeningReadFuture<'a> =
|
||
|
impl std::future::Future<Output = Result<PendingReader<'a>, CantOpen>>;
|
||
|
|
||
|
impl Pending {
|
||
|
async fn read(&mut self) -> Result<impl AsyncRead + '_, CantOpen> {
|
||
|
Ok(42)
|
||
|
}
|
||
|
|
||
|
fn read_fut(&mut self) -> OpeningReadFuture<'_> {
|
||
|
self.read()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn main() {}
|