@@ -1768,6 +1768,47 @@ impl<T> *const [T] {
1768
1768
}
1769
1769
}
1770
1770
1771
+ impl < T , const N : usize > * const [ T ; N ] {
1772
+ /// Returns a raw pointer to the array's buffer.
1773
+ ///
1774
+ /// This is equivalent to casting `self` to `*const T`, but more type-safe.
1775
+ ///
1776
+ /// # Examples
1777
+ ///
1778
+ /// ```rust
1779
+ /// #![feature(array_ptr_get)]
1780
+ /// use std::ptr;
1781
+ ///
1782
+ /// let arr: *const [i8; 3] = ptr::null();
1783
+ /// assert_eq!(arr.as_ptr(), ptr::null());
1784
+ /// ```
1785
+ #[ inline]
1786
+ #[ unstable( feature = "array_ptr_get" , issue = "119411" ) ]
1787
+ #[ rustc_const_unstable( feature = "array_ptr_get" , issue = "119411" ) ]
1788
+ pub const fn as_ptr ( self ) -> * const T {
1789
+ self as * const T
1790
+ }
1791
+
1792
+ /// Returns a raw pointer to a shared slice containing the entire array.
1793
+ ///
1794
+ /// # Examples
1795
+ ///
1796
+ /// ```
1797
+ /// #![feature(array_ptr_get, slice_ptr_len)]
1798
+ ///
1799
+ /// let arr: *const [i32; 3] = &[1, 2, 4] as *const [i32; 3];
1800
+ /// let slice: *const [i32] = arr.as_slice();
1801
+ /// assert_eq!(slice.len(), 3);
1802
+ /// ```
1803
+ #[ inline]
1804
+ #[ unstable( feature = "array_ptr_get" , issue = "119411" ) ]
1805
+ #[ rustc_const_unstable( feature = "array_ptr_get" , issue = "119411" ) ]
1806
+ pub const fn as_slice ( self ) -> * const [ T ] {
1807
+ // SAFETY: `N` is the length of the array, so the pointer is always in-bounds.
1808
+ unsafe { slice:: from_raw_parts ( self . as_ptr ( ) , N ) }
1809
+ }
1810
+ }
1811
+
1771
1812
// Equality for pointers
1772
1813
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1773
1814
impl < T : ?Sized > PartialEq for * const T {
0 commit comments