Closed
Description
This snippet works:
fn combine_flags(flags: &[MagicFlag]) -> c_int {
vec::foldl(0, flags, |a: c_int, b: &MagicFlag| a | (*b as c_int))
}
Changing to the following doesn't compile because it gets inferred as an @ closure:
fn combine_flags(flags: &[MagicFlag]) -> c_int {
flags.foldl(0, |a: c_int, b: &MagicFlag| a | (*b as c_int))
}
Error:
magic.rs:62:15: 62:61 error: mismatched types: expected `&fn(&core::libc::types::os::arch::c95::c_int, &MagicFlag) -> core::libc::types::os::arch::c95::c_int` but found `&fn(core::libc::types::os::arch::c95::c_int, &MagicFlag) -> core::libc::types::os::arch::c95::c_int` (expected &-ptr but found core::libc::types::os::arch::c95::c_int)
magic.rs:62 flags.foldl(0, |a: c_int, b: &MagicFlag| a | (*b as c_int))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
zsh: exit 101 rustc magic.rs --test -O
The full code is in this repo.