@@ -1187,8 +1187,9 @@ impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Weak<U>> for Weak<T> {}
11871187
11881188impl < T >  Weak < T >  { 
11891189    /// Constructs a new `Weak<T>`, without allocating any memory. 
1190-      /// Calling [`upgrade`][Weak::upgrade]  on the return value always gives [`None`]. 
1190+      /// Calling [`upgrade`] on the return value always gives [`None`]. 
11911191     /// 
1192+      /// [`upgrade`]: #method.upgrade 
11921193     /// [`None`]: ../../std/option/enum.Option.html 
11931194     /// 
11941195     /// # Examples 
@@ -1260,6 +1261,52 @@ impl<T: ?Sized> Weak<T> {
12601261            Some ( unsafe  {  self . ptr . as_ref ( )  } ) 
12611262        } 
12621263    } 
1264+ 
1265+     /// Returns true if the two `Weak`s point to the same value (not just values 
1266+      /// that compare as equal). 
1267+      /// 
1268+      /// # Notes 
1269+      /// 
1270+      /// Since this compares pointers it means that `Weak::new()` will equal each 
1271+      /// other, even though they don't point to any value. 
1272+      /// 
1273+      /// # Examples 
1274+      /// 
1275+      /// ``` 
1276+      /// #![feature(weak_ptr_eq)] 
1277+      /// use std::rc::{Rc, Weak}; 
1278+      /// 
1279+      /// let first_rc = Rc::new(5); 
1280+      /// let first = Rc::downgrade(&first_rc); 
1281+      /// let second = Rc::downgrade(&first_rc); 
1282+      /// 
1283+      /// assert!(Weak::ptr_eq(&first, &second)); 
1284+      /// 
1285+      /// let third_rc = Rc::new(5); 
1286+      /// let third = Rc::downgrade(&third_rc); 
1287+      /// 
1288+      /// assert!(!Weak::ptr_eq(&first, &third)); 
1289+      /// ``` 
1290+      /// 
1291+      /// Comparing `Weak::new`. 
1292+      /// 
1293+      /// ``` 
1294+      /// #![feature(weak_ptr_eq)] 
1295+      /// use std::rc::{Rc, Weak}; 
1296+      /// 
1297+      /// let first = Weak::new(); 
1298+      /// let second = Weak::new(); 
1299+      /// assert!(Weak::ptr_eq(&first, &second)); 
1300+      /// 
1301+      /// let third_rc = Rc::new(()); 
1302+      /// let third = Rc::downgrade(&third_rc); 
1303+      /// assert!(!Weak::ptr_eq(&first, &third)); 
1304+      /// ``` 
1305+      #[ inline]  
1306+     #[ unstable( feature = "weak_ptr_eq" ,  issue = "55981" ) ]  
1307+     pub  fn  ptr_eq ( this :  & Self ,  other :  & Self )  -> bool  { 
1308+         this. ptr . as_ptr ( )  == other. ptr . as_ptr ( ) 
1309+     } 
12631310} 
12641311
12651312#[ stable( feature = "rc_weak" ,  since = "1.4.0" ) ]  
0 commit comments