//@ run-pass | |
// Fast path, main can see the concrete type returned. | |
fn before() -> impl FnMut(i32) { | |
let mut p = Box::new(0); | |
move |x| *p = x | |
} | |
fn send<T: Send>(_: T) {} | |
fn main() { | |
send(before()); | |
send(after()); | |
} | |
// Deferred path, main has to wait until typeck finishes, | |
// to check if the return type of after is Send. | |
fn after() -> impl FnMut(i32) { | |
let mut p = Box::new(0); | |
move |x| *p = x | |
} |