| #![feature(no_core)] | |
| #![no_core] | |
| #![feature(negative_impls, lang_items)] | |
| #[lang = "sized"] | |
| trait Sized {} | |
| #[lang = "deref"] | |
| pub trait Deref { | |
| /// The resulting type after dereferencing. | |
| #[stable(feature = "rust1", since = "1.0.0")] | |
| // #[rustc_diagnostic_item = "deref_target"] | |
| type Target: ?Sized; | |
| /// Dereferences the value. | |
| #[must_use] | |
| #[stable(feature = "rust1", since = "1.0.0")] | |
| // #[rustc_diagnostic_item = "deref_method"] | |
| fn deref(&self) -> &Self::Target; | |
| } | |
| impl<T: ?Sized> Deref for &T { | |
| type Target = T; | |
| fn deref(&self) -> &T { | |
| *self | |
| } | |
| } | |
| // this is added because of #3030 | |
| extern "C" { | |
| fn never() -> !; | |
| } | |
| impl<T: ?Sized> !DerefMut for &T { | |
| fn deref_mut(&mut self) -> &mut T { | |
| unsafe { never() } | |
| } | |
| } | |
| impl<T: ?Sized> Deref for &mut T { | |
| type Target = T; | |
| fn deref(&self) -> &T { | |
| *self | |
| } | |
| } | |
| #[lang = "deref_mut"] | |
| pub trait DerefMut: Deref { | |
| /// Mutably dereferences the value. | |
| #[stable(feature = "rust1", since = "1.0.0")] | |
| fn deref_mut(&mut self) -> &mut Self::Target; | |
| } | |
| impl<T: ?Sized> DerefMut for &mut T { | |
| fn deref_mut(&mut self) -> &mut T { | |
| *self | |
| } | |
| } |