Some(unsafe { self.ptr.as_ref() })
}
}
+
+ /// Returns true if the two `Weak`s point to the same value (not just values
+ /// that compare as equal).
+ ///
+ /// # Notes
+ ///
+ /// Since this compares pointers it means that `Weak::new()` will equal each
+ /// other, even though they don't point to any value.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// #![feature(weak_ptr_eq)]
+ /// use std::rc::{Rc, Weak};
+ ///
+ /// let first_rc = Rc::new(5);
+ /// let first = Rc::downgrade(&first_rc);
+ /// let second = Rc::downgrade(&first_rc);
+ ///
+ /// assert!(Weak::ptr_eq(&first, &second));
+ ///
+ /// let third_rc = Rc::new(5);
+ /// let third = Rc::downgrade(&third_rc);
+ ///
+ /// assert!(!Weak::ptr_eq(&first, &third));
+ /// ```
+ ///
+ /// Comparing `Weak::new`.
+ ///
+ /// ```
+ /// #![feature(weak_ptr_eq)]
+ /// use std::rc::{Rc, Weak};
+ ///
+ /// let first = Weak::new();
+ /// let second = Weak::new();
+ /// assert!(Weak::ptr_eq(&first, &second));
+ ///
+ /// let third_rc = Rc::new(());
+ /// let third = Rc::downgrade(&third_rc);
+ /// assert!(!Weak::ptr_eq(&first, &third));
+ /// ```
+ #[inline]
+ #[unstable(feature = "weak_ptr_eq", issue = "55981")]
+ pub fn ptr_eq(this: &Self, other: &Self) -> bool {
+ this.ptr.as_ptr() == other.ptr.as_ptr()
+ }
}
#[stable(feature = "rc_weak", since = "1.4.0")]