| //@ run-pass |
| use std::mem; |
| |
| const FOO: fn(u8) -> u8 = |v: u8| { v }; |
| |
| const BAR: [fn(&mut u32); 5] = [ |
| |_: &mut u32| {}, |
| |v: &mut u32| *v += 1, |
| |v: &mut u32| *v += 2, |
| |v: &mut u32| *v += 3, |
| |v: &mut u32| *v += 4, |
| ]; |
| fn func_specific() -> fn() -> u32 { |
| || return 42 |
| } |
| |
| fn generic<T>(_: T) -> fn() -> usize { |
| || mem::size_of::<T>() |
| } |
| |
| fn main() { |
| // Items |
| assert_eq!(func_specific()(), 42); |
| let foo: fn(u8) -> u8 = |v: u8| { v }; |
| assert_eq!(foo(31), 31); |
| // Constants |
| assert_eq!(FOO(31), 31); |
| let mut a: u32 = 0; |
| assert_eq!({ BAR[0](&mut a); a }, 0); |
| assert_eq!({ BAR[1](&mut a); a }, 1); |
| assert_eq!({ BAR[2](&mut a); a }, 3); |
| assert_eq!({ BAR[3](&mut a); a }, 6); |
| assert_eq!({ BAR[4](&mut a); a }, 10); |
| assert_eq!(generic(0i8)(), 1); |
| } |