1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
// Verify that lifetime resolution correctly accounts for `Fn` bare trait objects.
//@ check-pass
#![allow(bare_trait_objects)]
// This should work as: fn next_u32(fill_buf: &mut dyn FnMut(&mut [u8]))
fn next_u32(fill_buf: &mut FnMut(&mut [u8])) {
let mut buf: [u8; 4] = [0; 4];
fill_buf(&mut buf);
}
fn explicit(fill_buf: &mut dyn FnMut(&mut [u8])) {
let mut buf: [u8; 4] = [0; 4];
fill_buf(&mut buf);
}
fn main() {
let _: fn(&mut FnMut(&mut [u8])) = next_u32;
let _: &dyn Fn(&mut FnMut(&mut [u8])) = &next_u32;
let _: fn(&mut FnMut(&mut [u8])) = explicit;
let _: &dyn Fn(&mut FnMut(&mut [u8])) = &explicit;
let _: fn(&mut dyn FnMut(&mut [u8])) = next_u32;
let _: &dyn Fn(&mut dyn FnMut(&mut [u8])) = &next_u32;
let _: fn(&mut dyn FnMut(&mut [u8])) = explicit;
let _: &dyn Fn(&mut dyn FnMut(&mut [u8])) = &explicit;
}
|