pub unsafe trait AllocSliceDst<S: ?Sized + SliceDst> {
// Required method
unsafe fn new_slice_dst<I>(len: usize, init: I) -> Self
where I: FnOnce(NonNull<S>);
}Expand description
Types that can allocate a custom slice DST within them.
§Implementation note
For most types, TryAllocSliceDst should be the implementation primitive.
This trait can then be implemented in terms of TryAllocSliceDst:
unsafe impl<S: ?Sized + SliceDst> AllocSliceDst<S> for Container<S> {
unsafe fn new_slice_dst<I>(len: usize, init: I) -> Self
where
I: FnOnce(ptr::NonNull<S>),
{
enum Void {} // or never (!) once it is stable
#[allow(clippy::unit_arg)]
let init = |ptr| Ok::<(), Void>(init(ptr));
match Self::try_new_slice_dst(len, init) {
Ok(a) => a,
Err(void) => match void {},
}
}
}This is not a blanket impl due to coherence rules; if the blanket impl were present,
it would be impossible to implement AllocSliceDst instead of TryAllocSliceDst.
§Safety
Must be implemented as described and may be relied upon by generic code.
Required Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.