diff options
| author | Simon Sapin <simon.sapin@exyr.org> | 2019-05-07 13:32:07 +0200 |
|---|---|---|
| committer | Simon Sapin <simon.sapin@exyr.org> | 2019-05-07 13:57:01 +0200 |
| commit | d5e819015f550bedb27bc287f96f3937bb831cd5 (patch) | |
| tree | 27167aae1efbc95c7ea692f6f32f90d3a98cc408 /src/libcore | |
| parent | a19cf18c7dbbcc46dddea81df3a4cee1735c2349 (diff) | |
| download | rust-d5e819015f550bedb27bc287f96f3937bb831cd5.tar.gz rust-d5e819015f550bedb27bc287f96f3937bb831cd5.zip | |
Add a `cast` method to raw pointers.
This is similar to `NonNull::cast`. Compared to the `as` operator (which has a wide range of meanings depending on the input and output types), a call to this method: * Can only go from a raw pointer to a raw pointer * Cannot change the pointer’s `const`ness … even when the pointed types are inferred based on context.
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/ptr.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libcore/ptr.rs b/src/libcore/ptr.rs index a41be4269d5..6355bcdcab2 100644 --- a/src/libcore/ptr.rs +++ b/src/libcore/ptr.rs @@ -974,6 +974,13 @@ impl<T: ?Sized> *const T { (self as *const u8) == null() } + /// Cast to a pointer to a different type + #[unstable(feature = "ptr_cast", issue = "60602")] + #[inline] + pub const fn cast<U>(self) -> *const U { + self as _ + } + /// Returns `None` if the pointer is null, or else returns a reference to /// the value wrapped in `Some`. /// @@ -1593,6 +1600,13 @@ impl<T: ?Sized> *mut T { (self as *mut u8) == null_mut() } + /// Cast to a pointer to a different type + #[unstable(feature = "ptr_cast", issue = "60602")] + #[inline] + pub const fn cast<U>(self) -> *mut U { + self as _ + } + /// Returns `None` if the pointer is null, or else returns a reference to /// the value wrapped in `Some`. /// |
