// run-pass // Ensure non-capturing Closure passing CoerceMany work correctly. fn foo(_: usize) -> usize { 0 } fn bar(_: usize) -> usize { 1 } fn add(a: i32, b: i32) -> i32 { a + b } fn main() { // Coerce result check type FnPointer = fn(usize) -> usize; let c = |x| x; let c_pointer: FnPointer = c; assert_eq!(c_pointer(42), 42); let f = match 0 { 0 => foo, 1 => |_| 1, _ => unimplemented!(), }; assert_eq!(f(42), 0); let f = match 2 { 2 => |_| 2, 0 => foo, _ => unimplemented!(), }; assert_eq!(f(42), 2); let f = match 1 { 0 => foo, 1 => bar, 2 => |_| 2, _ => unimplemented!(), }; assert_eq!(f(42), 1); let clo0 = |_: usize| 0; let clo1 = |_| 1; let clo2 = |_| 2; let f = match 0 { 0 => clo0, 1 => clo1, 2 => clo2, _ => unimplemented!(), }; assert_eq!(f(42), 0); let funcs = [add, |a, b| (a - b) as i32]; assert_eq!([funcs[0](5, 5), funcs[1](5, 5)], [10, 0]); }