// run-pass fn with_closure(f: F) -> Result where F: FnOnce(&char) -> Result, { f(&'a') } fn main() { // Test that supplying the `-> Result` manually here // (which is needed to constrain `R`) still allows us to figure // out that the type of `x` is `&'a char` where `'a` is bound in // the closure (if we didn't, we'd get a type-error because // `with_closure` requires a bound region). // // This pattern was found in the wild. let z = with_closure(|x| -> Result { Ok(*x) }); assert_eq!(z.unwrap(), 'a'); // It also works with `_`: let z = with_closure(|x: _| -> Result { Ok(*x) }); assert_eq!(z.unwrap(), 'a'); // It also works with `&_`: let z = with_closure(|x: &_| -> Result { Ok(*x) }); assert_eq!(z.unwrap(), 'a'); }