File tree Expand file tree Collapse file tree 2 files changed +42
-0
lines changed Expand file tree Collapse file tree 2 files changed +42
-0
lines changed Original file line number Diff line number Diff line change @@ -433,6 +433,27 @@ impl<T: ?Sized> Rc<T> {
433433        } 
434434    } 
435435
436+     /// Consumes the `Rc`, returning the wrapped pointer as `NonNull<T>`. 
437+ /// 
438+ /// # Examples 
439+ /// 
440+ /// ``` 
441+ /// #![feature(rc_into_raw_non_null)] 
442+ /// 
443+ /// use std::rc::Rc; 
444+ /// 
445+ /// let x = Rc::new(10); 
446+ /// let ptr = Rc::into_raw_non_null(x); 
447+ /// let deref = unsafe { *ptr.as_ref() }; 
448+ /// assert_eq!(deref, 10); 
449+ /// ``` 
450+ #[ unstable( feature = "rc_into_raw_non_null" ,  issue = "47336" ) ]  
451+     #[ inline]  
452+     pub  fn  into_raw_non_null ( this :  Self )  -> NonNull < T >  { 
453+         // safe because Rc guarantees its pointer is non-null 
454+         unsafe  {  NonNull :: new_unchecked ( Rc :: into_raw ( this)  as  * mut  _ )  } 
455+     } 
456+ 
436457    /// Creates a new [`Weak`][weak] pointer to this value. 
437458/// 
438459/// [weak]: struct.Weak.html 
Original file line number Diff line number Diff line change @@ -413,6 +413,27 @@ impl<T: ?Sized> Arc<T> {
413413        } 
414414    } 
415415
416+     /// Consumes the `Arc`, returning the wrapped pointer as `NonNull<T>`. 
417+ /// 
418+ /// # Examples 
419+ /// 
420+ /// ``` 
421+ /// #![feature(rc_into_raw_non_null)] 
422+ /// 
423+ /// use std::sync::Arc; 
424+ /// 
425+ /// let x = Arc::new(10); 
426+ /// let ptr = Arc::into_raw_non_null(x); 
427+ /// let deref = unsafe { *ptr.as_ref() }; 
428+ /// assert_eq!(deref, 10); 
429+ /// ``` 
430+ #[ unstable( feature = "rc_into_raw_non_null" ,  issue = "47336" ) ]  
431+     #[ inline]  
432+     pub  fn  into_raw_non_null ( this :  Self )  -> NonNull < T >  { 
433+         // safe because Arc guarantees its pointer is non-null 
434+         unsafe  {  NonNull :: new_unchecked ( Arc :: into_raw ( this)  as  * mut  _ )  } 
435+     } 
436+ 
416437    /// Creates a new [`Weak`][weak] pointer to this value. 
417438/// 
418439/// [weak]: struct.Weak.html 
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments