@@ -479,6 +479,40 @@ impl<T: ?Sized> PartialEq for *mut T {
479
479
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
480
480
impl < T : ?Sized > Eq for * mut T { }
481
481
482
+ /// Compare raw pointers for equality.
483
+ ///
484
+ /// This is the same as using the `==` operator, but less generic:
485
+ /// the arguments have to be `*const T` raw pointers,
486
+ /// not anything that implements `PartialEq`.
487
+ ///
488
+ /// This can be used to compare `&T` references (which coerce to `*const T` implicitly)
489
+ /// by their address rather than comparing the values they point to
490
+ /// (which is what the `PartialEq for &T` implementation does).
491
+ ///
492
+ /// # Examples
493
+ ///
494
+ /// ```
495
+ /// #![feature(ptr_eq)]
496
+ /// use std::ptr;
497
+ ///
498
+ /// let five = 5;
499
+ /// let other_five = 5;
500
+ /// let five_ref = &five;
501
+ /// let same_five_ref = &five;
502
+ /// let other_five_ref = &other_five;
503
+ ///
504
+ /// assert!(five_ref == same_five_ref);
505
+ /// assert!(five_ref == other_five_ref);
506
+ ///
507
+ /// assert!(ptr::eq(five_ref, same_five_ref));
508
+ /// assert!(!ptr::eq(five_ref, other_five_ref));
509
+ /// ```
510
+ #[ unstable( feature = "ptr_eq" , reason = "newly added" , issue = "36497" ) ]
511
+ #[ inline]
512
+ pub fn eq < T : ?Sized > ( a : * const T , b : * const T ) -> bool {
513
+ a == b
514
+ }
515
+
482
516
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
483
517
impl < T : ?Sized > Clone for * const T {
484
518
#[ inline]
0 commit comments