30 lines
667 B
Rust
30 lines
667 B
Rust
//@ check-pass
|
|
// Checks that we can infer a closure signature even if the `FnOnce` bound is
|
|
// a supertrait of the obligations we have currently registered for the Ty var.
|
|
|
|
pub trait Receive<T, E>: FnOnce(Result<T, E>) {
|
|
fn receive(self, res: Result<T, E>);
|
|
}
|
|
|
|
impl<T, E, F: FnOnce(Result<T, E>)> Receive<T, E> for F {
|
|
fn receive(self, res: Result<T, E>) {
|
|
self(res)
|
|
}
|
|
}
|
|
|
|
pub trait Async<T, E> {
|
|
fn receive<F: Receive<T, E>>(self, f: F);
|
|
}
|
|
|
|
impl<T, E> Async<T, E> for Result<T, E> {
|
|
fn receive<F: Receive<T, E>>(self, f: F) {
|
|
f(self)
|
|
}
|
|
}
|
|
|
|
pub fn main() {
|
|
Ok::<u32, ()>(123).receive(|res| {
|
|
res.unwrap();
|
|
});
|
|
}
|