A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/rust-lang/libs-team/issues/245 below:

Remove `MaybeUninit::slice_as_(mut_)ptr` and optionally add `*const/*mut MaybeUninit<T> -> *const/*mut T` type safe conversions · Issue #245 · rust-lang/libs-team · GitHub

Proposal

This ACP breaks off a small piece of #122 that wasn't discussed in depth.

Problem statement

The MaybeUninit::slice_as_(mut_)ptr methods force you to elide bounds checks to go from MaybeUninit<T> to T.

fn slice_as_ptr(this: &[MaybeUninit<T>]) -> *const T
Motivating examples or use cases

There is evidence of unnecessary bounds elision occurring in the stdlib: notice the places that were switched to using array indexing in rust-lang/rust@f2e9b40.

Solution sketch

Remove MaybeUninit::slice_as_(mut_)ptr.

Optionally, I'd like to add methods for *const/*mut MaybeUninit<T> -> *const/*mut T. This restores the type safety provided by slice_as_ptr and enables improved type safety in other cases where one has a raw pointer to a MaybeUninit and wishes to get at the wrapped type. Without these methods, you'd just have to do the cast manually which isn't the end of the world.

impl<T> *const MaybeUninit<T> {
    pub const fn raw_as_ptr(self) -> *const T
}

impl<T> *mut MaybeUninit<T> {
    pub const fn raw_as_mut_ptr(self) -> *mut T
}
Links and related work

rust-lang/rust#103133


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4