Given the following code: https://godbolt.org/z/zK79rccxf ```rust use std::mem::MaybeUninit; use std::pin::Pin; unsafe fn f(x: Pin<&mut MaybeUninit<i32>>) { x.map_unchecked_mut(MaybeUninit::assume_init_mut); } ``` The current output is: ``` error[E0277]: expected a `FnOnce<(&mut MaybeUninit<i32>,)>` closure, found `for<'r> unsafe fn(&'r mut MaybeUninit<_>) -> &'r mut _ {MaybeUninit::<_>::assume_init_mut}` --> <source>:5:25 | 5 | x.map_unchecked_mut(MaybeUninit::assume_init_mut); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected an `FnOnce<(&mut MaybeUninit<i32>,)>` closure, found `for<'r> unsafe fn(&'r mut MaybeUninit<_>) -> &'r mut _ {MaybeUninit::<_>::assume_init_mut}` | = help: the trait `for<'r> FnOnce<(&'r mut MaybeUninit<i32>,)>` is not implemented for `for<'r> unsafe fn(&'r mut MaybeUninit<_>) -> &'r mut _ {MaybeUninit::<_>::assume_init_mut}` error: aborting due to previous error ``` This error is a bit difficult, since it does not give the user the essential information: `assume_init_mut` is unsafe, and therefore cannot be turned into a Fn* trait. Ideally, the compiler would point this out, and suggest a rewrite into a closure like `|x| x.assume_init_mut()` (plus or minus an `unsafe {}` block as context requires).