Constify conversion traits
This commit is contained in:
@@ -17,9 +17,11 @@ use crate::fmt;
|
||||
use crate::string::String;
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<'a, B: ?Sized> Borrow<B> for Cow<'a, B>
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<'a, B: ?Sized> const Borrow<B> for Cow<'a, B>
|
||||
where
|
||||
B: ToOwned,
|
||||
B::Owned: [const] Borrow<B>,
|
||||
{
|
||||
fn borrow(&self) -> &B {
|
||||
&**self
|
||||
@@ -326,9 +328,10 @@ impl<B: ?Sized + ToOwned> Cow<'_, B> {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<B: ?Sized + ToOwned> Deref for Cow<'_, B>
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<B: ?Sized + ToOwned> const Deref for Cow<'_, B>
|
||||
where
|
||||
B::Owned: Borrow<B>,
|
||||
B::Owned: [const] Borrow<B>,
|
||||
{
|
||||
type Target = B;
|
||||
|
||||
@@ -439,7 +442,11 @@ where
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: ?Sized + ToOwned> AsRef<T> for Cow<'_, T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized + ToOwned> const AsRef<T> for Cow<'_, T>
|
||||
where
|
||||
T::Owned: [const] Borrow<T>,
|
||||
{
|
||||
fn as_ref(&self) -> &T {
|
||||
self
|
||||
}
|
||||
|
||||
@@ -128,8 +128,9 @@ pub use realalloc::collections::TryReserveErrorKind;
|
||||
reason = "Uncertain how much info should be exposed",
|
||||
issue = "48043"
|
||||
)]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
#[cfg(not(test))]
|
||||
impl From<TryReserveErrorKind> for TryReserveError {
|
||||
impl const From<TryReserveErrorKind> for TryReserveError {
|
||||
#[inline]
|
||||
fn from(kind: TryReserveErrorKind) -> Self {
|
||||
Self { kind }
|
||||
@@ -137,8 +138,9 @@ impl From<TryReserveErrorKind> for TryReserveError {
|
||||
}
|
||||
|
||||
#[unstable(feature = "try_reserve_kind", reason = "new API", issue = "48043")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
#[cfg(not(test))]
|
||||
impl From<LayoutError> for TryReserveErrorKind {
|
||||
impl const From<LayoutError> for TryReserveErrorKind {
|
||||
/// Always evaluates to [`TryReserveErrorKind::CapacityOverflow`].
|
||||
#[inline]
|
||||
fn from(_: LayoutError) -> Self {
|
||||
|
||||
@@ -107,10 +107,10 @@
|
||||
#![feature(char_max_len)]
|
||||
#![feature(clone_to_uninit)]
|
||||
#![feature(coerce_unsized)]
|
||||
#![feature(const_convert)]
|
||||
#![feature(const_default)]
|
||||
#![feature(const_eval_select)]
|
||||
#![feature(const_heap)]
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(core_intrinsics)]
|
||||
#![feature(deprecated_suggestion)]
|
||||
#![feature(deref_pure_trait)]
|
||||
@@ -168,6 +168,7 @@
|
||||
#![feature(allow_internal_unstable)]
|
||||
#![feature(cfg_sanitize)]
|
||||
#![feature(const_precise_live_drops)]
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(coroutine_trait)]
|
||||
#![feature(decl_macro)]
|
||||
#![feature(dropck_eyepatch)]
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
// Language features:
|
||||
// tidy-alphabetical-start
|
||||
#![feature(cfg_sanitize)]
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(dropck_eyepatch)]
|
||||
#![feature(lang_items)]
|
||||
#![feature(min_specialization)]
|
||||
|
||||
@@ -192,7 +192,7 @@ impl fmt::Display for TryFromSliceError {
|
||||
impl Error for TryFromSliceError {}
|
||||
|
||||
#[stable(feature = "try_from_slice_error", since = "1.36.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<Infallible> for TryFromSliceError {
|
||||
fn from(x: Infallible) -> TryFromSliceError {
|
||||
match x {}
|
||||
@@ -200,7 +200,8 @@ impl const From<Infallible> for TryFromSliceError {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T, const N: usize> AsRef<[T]> for [T; N] {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T, const N: usize> const AsRef<[T]> for [T; N] {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &[T] {
|
||||
&self[..]
|
||||
@@ -208,7 +209,8 @@ impl<T, const N: usize> AsRef<[T]> for [T; N] {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T, const N: usize> AsMut<[T]> for [T; N] {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T, const N: usize> const AsMut<[T]> for [T; N] {
|
||||
#[inline]
|
||||
fn as_mut(&mut self) -> &mut [T] {
|
||||
&mut self[..]
|
||||
@@ -216,14 +218,16 @@ impl<T, const N: usize> AsMut<[T]> for [T; N] {
|
||||
}
|
||||
|
||||
#[stable(feature = "array_borrow", since = "1.4.0")]
|
||||
impl<T, const N: usize> Borrow<[T]> for [T; N] {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T, const N: usize> const Borrow<[T]> for [T; N] {
|
||||
fn borrow(&self) -> &[T] {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "array_borrow", since = "1.4.0")]
|
||||
impl<T, const N: usize> BorrowMut<[T]> for [T; N] {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T, const N: usize> const BorrowMut<[T]> for [T; N] {
|
||||
fn borrow_mut(&mut self) -> &mut [T] {
|
||||
self
|
||||
}
|
||||
@@ -242,7 +246,8 @@ impl<T, const N: usize> BorrowMut<[T]> for [T; N] {
|
||||
/// assert_eq!(512, u16::from_le_bytes(bytes_tail));
|
||||
/// ```
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
impl<T, const N: usize> TryFrom<&[T]> for [T; N]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T, const N: usize> const TryFrom<&[T]> for [T; N]
|
||||
where
|
||||
T: Copy,
|
||||
{
|
||||
@@ -267,7 +272,8 @@ where
|
||||
/// assert_eq!(512, u16::from_le_bytes(bytes_tail));
|
||||
/// ```
|
||||
#[stable(feature = "try_from_mut_slice_to_array", since = "1.59.0")]
|
||||
impl<T, const N: usize> TryFrom<&mut [T]> for [T; N]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T, const N: usize> const TryFrom<&mut [T]> for [T; N]
|
||||
where
|
||||
T: Copy,
|
||||
{
|
||||
@@ -292,7 +298,8 @@ where
|
||||
/// assert_eq!(512, u16::from_le_bytes(*bytes_tail));
|
||||
/// ```
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N] {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<'a, T, const N: usize> const TryFrom<&'a [T]> for &'a [T; N] {
|
||||
type Error = TryFromSliceError;
|
||||
|
||||
#[inline]
|
||||
@@ -314,7 +321,8 @@ impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N] {
|
||||
/// assert_eq!(512, u16::from_le_bytes(*bytes_tail));
|
||||
/// ```
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; N] {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<'a, T, const N: usize> const TryFrom<&'a mut [T]> for &'a mut [T; N] {
|
||||
type Error = TryFromSliceError;
|
||||
|
||||
#[inline]
|
||||
|
||||
@@ -1156,7 +1156,7 @@ macro_rules! into_int_impl {
|
||||
($($ty:ty)*) => {
|
||||
$(
|
||||
#[unstable(feature = "ascii_char", issue = "110998")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<AsciiChar> for $ty {
|
||||
#[inline]
|
||||
fn from(chr: AsciiChar) -> $ty {
|
||||
|
||||
@@ -154,6 +154,8 @@
|
||||
/// [`String`]: ../../std/string/struct.String.html
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_diagnostic_item = "Borrow"]
|
||||
#[const_trait]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub trait Borrow<Borrowed: ?Sized> {
|
||||
/// Immutably borrows from an owned value.
|
||||
///
|
||||
@@ -185,6 +187,8 @@ pub trait Borrow<Borrowed: ?Sized> {
|
||||
/// for more information on borrowing as another type.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_diagnostic_item = "BorrowMut"]
|
||||
#[const_trait]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub trait BorrowMut<Borrowed: ?Sized>: Borrow<Borrowed> {
|
||||
/// Mutably borrows from an owned value.
|
||||
///
|
||||
@@ -206,7 +210,8 @@ pub trait BorrowMut<Borrowed: ?Sized>: Borrow<Borrowed> {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: ?Sized> Borrow<T> for T {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const Borrow<T> for T {
|
||||
#[rustc_diagnostic_item = "noop_method_borrow"]
|
||||
fn borrow(&self) -> &T {
|
||||
self
|
||||
@@ -214,28 +219,32 @@ impl<T: ?Sized> Borrow<T> for T {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: ?Sized> BorrowMut<T> for T {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const BorrowMut<T> for T {
|
||||
fn borrow_mut(&mut self) -> &mut T {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: ?Sized> Borrow<T> for &T {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const Borrow<T> for &T {
|
||||
fn borrow(&self) -> &T {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: ?Sized> Borrow<T> for &mut T {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const Borrow<T> for &mut T {
|
||||
fn borrow(&self) -> &T {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: ?Sized> BorrowMut<T> for &mut T {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const BorrowMut<T> for &mut T {
|
||||
fn borrow_mut(&mut self) -> &mut T {
|
||||
self
|
||||
}
|
||||
|
||||
@@ -63,14 +63,16 @@ impl ByteStr {
|
||||
/// ```
|
||||
#[inline]
|
||||
#[unstable(feature = "bstr", issue = "134915")]
|
||||
pub fn new<B: ?Sized + AsRef<[u8]>>(bytes: &B) -> &Self {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn new<B: ?Sized + [const] AsRef<[u8]>>(bytes: &B) -> &Self {
|
||||
ByteStr::from_bytes(bytes.as_ref())
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
#[unstable(feature = "bstr_internals", issue = "none")]
|
||||
#[inline]
|
||||
pub fn from_bytes(slice: &[u8]) -> &Self {
|
||||
#[rustc_const_unstable(feature = "bstr_internals", issue = "none")]
|
||||
pub const fn from_bytes(slice: &[u8]) -> &Self {
|
||||
// SAFETY: `ByteStr` is a transparent wrapper around `[u8]`, so we can turn a reference to
|
||||
// the wrapped type into a reference to the wrapper type.
|
||||
unsafe { &*(slice as *const [u8] as *const Self) }
|
||||
@@ -79,7 +81,8 @@ impl ByteStr {
|
||||
#[doc(hidden)]
|
||||
#[unstable(feature = "bstr_internals", issue = "none")]
|
||||
#[inline]
|
||||
pub fn from_bytes_mut(slice: &mut [u8]) -> &mut Self {
|
||||
#[rustc_const_unstable(feature = "bstr_internals", issue = "none")]
|
||||
pub const fn from_bytes_mut(slice: &mut [u8]) -> &mut Self {
|
||||
// SAFETY: `ByteStr` is a transparent wrapper around `[u8]`, so we can turn a reference to
|
||||
// the wrapped type into a reference to the wrapper type.
|
||||
unsafe { &mut *(slice as *mut [u8] as *mut Self) }
|
||||
@@ -88,20 +91,23 @@ impl ByteStr {
|
||||
#[doc(hidden)]
|
||||
#[unstable(feature = "bstr_internals", issue = "none")]
|
||||
#[inline]
|
||||
pub fn as_bytes(&self) -> &[u8] {
|
||||
#[rustc_const_unstable(feature = "bstr_internals", issue = "none")]
|
||||
pub const fn as_bytes(&self) -> &[u8] {
|
||||
&self.0
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
#[unstable(feature = "bstr_internals", issue = "none")]
|
||||
#[inline]
|
||||
pub fn as_bytes_mut(&mut self) -> &mut [u8] {
|
||||
#[rustc_const_unstable(feature = "bstr_internals", issue = "none")]
|
||||
pub const fn as_bytes_mut(&mut self) -> &mut [u8] {
|
||||
&mut self.0
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "bstr", issue = "134915")]
|
||||
impl Deref for ByteStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const Deref for ByteStr {
|
||||
type Target = [u8];
|
||||
|
||||
#[inline]
|
||||
@@ -111,7 +117,8 @@ impl Deref for ByteStr {
|
||||
}
|
||||
|
||||
#[unstable(feature = "bstr", issue = "134915")]
|
||||
impl DerefMut for ByteStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const DerefMut for ByteStr {
|
||||
#[inline]
|
||||
fn deref_mut(&mut self) -> &mut [u8] {
|
||||
&mut self.0
|
||||
@@ -185,7 +192,8 @@ impl fmt::Display for ByteStr {
|
||||
}
|
||||
|
||||
#[unstable(feature = "bstr", issue = "134915")]
|
||||
impl AsRef<[u8]> for ByteStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsRef<[u8]> for ByteStr {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &[u8] {
|
||||
&self.0
|
||||
@@ -193,7 +201,8 @@ impl AsRef<[u8]> for ByteStr {
|
||||
}
|
||||
|
||||
#[unstable(feature = "bstr", issue = "134915")]
|
||||
impl AsRef<ByteStr> for ByteStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsRef<ByteStr> for ByteStr {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &ByteStr {
|
||||
self
|
||||
@@ -203,7 +212,8 @@ impl AsRef<ByteStr> for ByteStr {
|
||||
// `impl AsRef<ByteStr> for [u8]` omitted to avoid widespread inference failures
|
||||
|
||||
#[unstable(feature = "bstr", issue = "134915")]
|
||||
impl AsRef<ByteStr> for str {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsRef<ByteStr> for str {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &ByteStr {
|
||||
ByteStr::new(self)
|
||||
@@ -211,7 +221,8 @@ impl AsRef<ByteStr> for str {
|
||||
}
|
||||
|
||||
#[unstable(feature = "bstr", issue = "134915")]
|
||||
impl AsMut<[u8]> for ByteStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsMut<[u8]> for ByteStr {
|
||||
#[inline]
|
||||
fn as_mut(&mut self) -> &mut [u8] {
|
||||
&mut self.0
|
||||
@@ -225,7 +236,8 @@ impl AsMut<[u8]> for ByteStr {
|
||||
// `impl Borrow<ByteStr> for str` omitted to avoid widespread inference failures
|
||||
|
||||
#[unstable(feature = "bstr", issue = "134915")]
|
||||
impl Borrow<[u8]> for ByteStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const Borrow<[u8]> for ByteStr {
|
||||
#[inline]
|
||||
fn borrow(&self) -> &[u8] {
|
||||
&self.0
|
||||
@@ -235,7 +247,8 @@ impl Borrow<[u8]> for ByteStr {
|
||||
// `impl BorrowMut<ByteStr> for [u8]` omitted to avoid widespread inference failures
|
||||
|
||||
#[unstable(feature = "bstr", issue = "134915")]
|
||||
impl BorrowMut<[u8]> for ByteStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const BorrowMut<[u8]> for ByteStr {
|
||||
#[inline]
|
||||
fn borrow_mut(&mut self) -> &mut [u8] {
|
||||
&mut self.0
|
||||
@@ -303,7 +316,8 @@ impl<'a> Default for &'a mut ByteStr {
|
||||
// }
|
||||
|
||||
#[unstable(feature = "bstr", issue = "134915")]
|
||||
impl<'a> TryFrom<&'a ByteStr> for &'a str {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<'a> const TryFrom<&'a ByteStr> for &'a str {
|
||||
type Error = crate::str::Utf8Error;
|
||||
|
||||
#[inline]
|
||||
@@ -313,7 +327,8 @@ impl<'a> TryFrom<&'a ByteStr> for &'a str {
|
||||
}
|
||||
|
||||
#[unstable(feature = "bstr", issue = "134915")]
|
||||
impl<'a> TryFrom<&'a mut ByteStr> for &'a mut str {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<'a> const TryFrom<&'a mut ByteStr> for &'a mut str {
|
||||
type Error = crate::str::Utf8Error;
|
||||
|
||||
#[inline]
|
||||
|
||||
@@ -390,7 +390,8 @@ impl<T: Ord + Copy> Ord for Cell<T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "cell_from", since = "1.12.0")]
|
||||
impl<T> From<T> for Cell<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<T> for Cell<T> {
|
||||
/// Creates a new `Cell<T>` containing the given value.
|
||||
fn from(t: T) -> Cell<T> {
|
||||
Cell::new(t)
|
||||
@@ -1402,7 +1403,8 @@ impl<T: ?Sized + Ord> Ord for RefCell<T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "cell_from", since = "1.12.0")]
|
||||
impl<T> From<T> for RefCell<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<T> for RefCell<T> {
|
||||
/// Creates a new `RefCell<T>` containing the given value.
|
||||
fn from(t: T) -> RefCell<T> {
|
||||
RefCell::new(t)
|
||||
@@ -1483,7 +1485,7 @@ pub struct Ref<'b, T: ?Sized + 'b> {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_deref", issue = "88955")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const Deref for Ref<'_, T> {
|
||||
type Target = T;
|
||||
|
||||
@@ -1967,7 +1969,7 @@ pub struct RefMut<'b, T: ?Sized + 'b> {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_deref", issue = "88955")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const Deref for RefMut<'_, T> {
|
||||
type Target = T;
|
||||
|
||||
@@ -1979,7 +1981,7 @@ impl<T: ?Sized> const Deref for RefMut<'_, T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_deref", issue = "88955")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const DerefMut for RefMut<'_, T> {
|
||||
#[inline]
|
||||
fn deref_mut(&mut self) -> &mut T {
|
||||
@@ -2434,7 +2436,8 @@ impl<T: [const] Default> const Default for UnsafeCell<T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "cell_from", since = "1.12.0")]
|
||||
impl<T> From<T> for UnsafeCell<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<T> for UnsafeCell<T> {
|
||||
/// Creates a new `UnsafeCell<T>` containing the given value.
|
||||
fn from(t: T) -> UnsafeCell<T> {
|
||||
UnsafeCell::new(t)
|
||||
@@ -2539,7 +2542,8 @@ impl<T: [const] Default> const Default for SyncUnsafeCell<T> {
|
||||
}
|
||||
|
||||
#[unstable(feature = "sync_unsafe_cell", issue = "95439")]
|
||||
impl<T> From<T> for SyncUnsafeCell<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<T> for SyncUnsafeCell<T> {
|
||||
/// Creates a new `SyncUnsafeCell<T>` containing the given value.
|
||||
fn from(t: T) -> SyncUnsafeCell<T> {
|
||||
SyncUnsafeCell::new(t)
|
||||
|
||||
@@ -395,7 +395,8 @@ impl<T: PartialEq> PartialEq for OnceCell<T> {
|
||||
impl<T: Eq> Eq for OnceCell<T> {}
|
||||
|
||||
#[stable(feature = "once_cell", since = "1.70.0")]
|
||||
impl<T> From<T> for OnceCell<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<T> for OnceCell<T> {
|
||||
/// Creates a new `OnceCell<T>` which already contains the given `value`.
|
||||
#[inline]
|
||||
fn from(value: T) -> Self {
|
||||
|
||||
@@ -36,7 +36,7 @@ pub(super) const unsafe fn from_u32_unchecked(i: u32) -> char {
|
||||
}
|
||||
|
||||
#[stable(feature = "char_convert", since = "1.13.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<char> for u32 {
|
||||
/// Converts a [`char`] into a [`u32`].
|
||||
///
|
||||
@@ -54,7 +54,7 @@ impl const From<char> for u32 {
|
||||
}
|
||||
|
||||
#[stable(feature = "more_char_conversions", since = "1.51.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<char> for u64 {
|
||||
/// Converts a [`char`] into a [`u64`].
|
||||
///
|
||||
@@ -74,7 +74,7 @@ impl const From<char> for u64 {
|
||||
}
|
||||
|
||||
#[stable(feature = "more_char_conversions", since = "1.51.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<char> for u128 {
|
||||
/// Converts a [`char`] into a [`u128`].
|
||||
///
|
||||
@@ -98,7 +98,8 @@ impl const From<char> for u128 {
|
||||
///
|
||||
/// See [`impl From<u8> for char`](char#impl-From<u8>-for-char) for details on the encoding.
|
||||
#[stable(feature = "u8_from_char", since = "1.59.0")]
|
||||
impl TryFrom<char> for u8 {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const TryFrom<char> for u8 {
|
||||
type Error = TryFromCharError;
|
||||
|
||||
/// Tries to convert a [`char`] into a [`u8`].
|
||||
@@ -113,7 +114,11 @@ impl TryFrom<char> for u8 {
|
||||
/// ```
|
||||
#[inline]
|
||||
fn try_from(c: char) -> Result<u8, Self::Error> {
|
||||
u8::try_from(u32::from(c)).map_err(|_| TryFromCharError(()))
|
||||
// FIXME(const-hack): this should use map_err instead
|
||||
match u8::try_from(u32::from(c)) {
|
||||
Ok(b) => Ok(b),
|
||||
Err(_) => Err(TryFromCharError(())),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,7 +127,8 @@ impl TryFrom<char> for u8 {
|
||||
///
|
||||
/// This corresponds to the UCS-2 encoding, as specified in ISO/IEC 10646:2003.
|
||||
#[stable(feature = "u16_from_char", since = "1.74.0")]
|
||||
impl TryFrom<char> for u16 {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const TryFrom<char> for u16 {
|
||||
type Error = TryFromCharError;
|
||||
|
||||
/// Tries to convert a [`char`] into a [`u16`].
|
||||
@@ -137,7 +143,11 @@ impl TryFrom<char> for u16 {
|
||||
/// ```
|
||||
#[inline]
|
||||
fn try_from(c: char) -> Result<u16, Self::Error> {
|
||||
u16::try_from(u32::from(c)).map_err(|_| TryFromCharError(()))
|
||||
// FIXME(const-hack): this should use map_err instead
|
||||
match u16::try_from(u32::from(c)) {
|
||||
Ok(x) => Ok(x),
|
||||
Err(_) => Err(TryFromCharError(())),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,7 +170,7 @@ impl TryFrom<char> for u16 {
|
||||
/// for a superset of Windows-1252 that fills the remaining blanks with corresponding
|
||||
/// C0 and C1 control codes.
|
||||
#[stable(feature = "char_convert", since = "1.13.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<u8> for char {
|
||||
/// Converts a [`u8`] into a [`char`].
|
||||
///
|
||||
@@ -246,7 +256,7 @@ const fn char_try_from_u32(i: u32) -> Result<char, CharTryFromError> {
|
||||
}
|
||||
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const TryFrom<u32> for char {
|
||||
type Error = CharTryFromError;
|
||||
|
||||
|
||||
@@ -217,7 +217,7 @@ pub const fn identity<T>(x: T) -> T {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_diagnostic_item = "AsRef"]
|
||||
#[const_trait]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub trait AsRef<T: PointeeSized>: PointeeSized {
|
||||
/// Converts this type into a shared reference of the (usually inferred) input type.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
@@ -370,7 +370,7 @@ pub trait AsRef<T: PointeeSized>: PointeeSized {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_diagnostic_item = "AsMut"]
|
||||
#[const_trait]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub trait AsMut<T: PointeeSized>: PointeeSized {
|
||||
/// Converts this type into a mutable reference of the (usually inferred) input type.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
@@ -449,7 +449,7 @@ pub trait AsMut<T: PointeeSized>: PointeeSized {
|
||||
#[rustc_diagnostic_item = "Into"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[doc(search_unbox)]
|
||||
#[rustc_const_unstable(feature = "const_from", issue = "143773")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
#[const_trait]
|
||||
pub trait Into<T>: Sized {
|
||||
/// Converts this type into the (usually inferred) input type.
|
||||
@@ -586,7 +586,7 @@ pub trait Into<T>: Sized {
|
||||
note = "to coerce a `{T}` into a `{Self}`, use `&*` as a prefix",
|
||||
))]
|
||||
#[doc(search_unbox)]
|
||||
#[rustc_const_unstable(feature = "const_from", issue = "143773")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
#[const_trait]
|
||||
pub trait From<T>: Sized {
|
||||
/// Converts to this type from the input type.
|
||||
@@ -615,7 +615,7 @@ pub trait From<T>: Sized {
|
||||
/// [`Into`], see there for details.
|
||||
#[rustc_diagnostic_item = "TryInto"]
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_from", issue = "143773")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
#[const_trait]
|
||||
pub trait TryInto<T>: Sized {
|
||||
/// The type returned in the event of a conversion error.
|
||||
@@ -695,7 +695,7 @@ pub trait TryInto<T>: Sized {
|
||||
/// [`try_from`]: TryFrom::try_from
|
||||
#[rustc_diagnostic_item = "TryFrom"]
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_from", issue = "143773")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
#[const_trait]
|
||||
pub trait TryFrom<T>: Sized {
|
||||
/// The type returned in the event of a conversion error.
|
||||
@@ -714,7 +714,7 @@ pub trait TryFrom<T>: Sized {
|
||||
|
||||
// As lifts over &
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: PointeeSized, U: PointeeSized> const AsRef<U> for &T
|
||||
where
|
||||
T: [const] AsRef<U>,
|
||||
@@ -727,7 +727,7 @@ where
|
||||
|
||||
// As lifts over &mut
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: PointeeSized, U: PointeeSized> const AsRef<U> for &mut T
|
||||
where
|
||||
T: [const] AsRef<U>,
|
||||
@@ -748,7 +748,7 @@ where
|
||||
|
||||
// AsMut lifts over &mut
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: PointeeSized, U: PointeeSized> const AsMut<U> for &mut T
|
||||
where
|
||||
T: [const] AsMut<U>,
|
||||
@@ -769,7 +769,7 @@ where
|
||||
|
||||
// From implies Into
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_from", issue = "143773")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T, U> const Into<U> for T
|
||||
where
|
||||
U: [const] From<T>,
|
||||
@@ -787,7 +787,7 @@ where
|
||||
|
||||
// From (and thus Into) is reflexive
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_from", issue = "143773")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<T> for T {
|
||||
/// Returns the argument unchanged.
|
||||
#[inline(always)]
|
||||
@@ -804,7 +804,7 @@ impl<T> const From<T> for T {
|
||||
#[stable(feature = "convert_infallible", since = "1.34.0")]
|
||||
#[rustc_reservation_impl = "permitting this impl would forbid us from adding \
|
||||
`impl<T> From<!> for T` later; see rust-lang/rust#64715 for details"]
|
||||
#[rustc_const_unstable(feature = "const_from", issue = "143773")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<!> for T {
|
||||
fn from(t: !) -> T {
|
||||
t
|
||||
@@ -813,7 +813,7 @@ impl<T> const From<!> for T {
|
||||
|
||||
// TryFrom implies TryInto
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_from", issue = "143773")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T, U> const TryInto<U> for T
|
||||
where
|
||||
U: [const] TryFrom<T>,
|
||||
@@ -829,7 +829,7 @@ where
|
||||
// Infallible conversions are semantically equivalent to fallible conversions
|
||||
// with an uninhabited error type.
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_from", issue = "143773")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T, U> const TryFrom<U> for T
|
||||
where
|
||||
U: [const] Into<T>,
|
||||
@@ -847,7 +847,7 @@ where
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const AsRef<[T]> for [T] {
|
||||
#[inline(always)]
|
||||
fn as_ref(&self) -> &[T] {
|
||||
@@ -856,7 +856,7 @@ impl<T> const AsRef<[T]> for [T] {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const AsMut<[T]> for [T] {
|
||||
#[inline(always)]
|
||||
fn as_mut(&mut self) -> &mut [T] {
|
||||
@@ -865,7 +865,7 @@ impl<T> const AsMut<[T]> for [T] {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsRef<str> for str {
|
||||
#[inline(always)]
|
||||
fn as_ref(&self) -> &str {
|
||||
@@ -874,7 +874,7 @@ impl const AsRef<str> for str {
|
||||
}
|
||||
|
||||
#[stable(feature = "as_mut_str_for_str", since = "1.51.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsMut<str> for str {
|
||||
#[inline(always)]
|
||||
fn as_mut(&mut self) -> &mut str {
|
||||
@@ -936,7 +936,7 @@ impl const AsMut<str> for str {
|
||||
pub enum Infallible {}
|
||||
|
||||
#[stable(feature = "convert_infallible", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_clone", issue = "142757")]
|
||||
impl const Clone for Infallible {
|
||||
fn clone(&self) -> Infallible {
|
||||
match *self {}
|
||||
@@ -986,7 +986,7 @@ impl Ord for Infallible {
|
||||
}
|
||||
|
||||
#[stable(feature = "convert_infallible", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<!> for Infallible {
|
||||
#[inline]
|
||||
fn from(x: !) -> Self {
|
||||
|
||||
@@ -69,7 +69,7 @@ macro_rules! impl_from {
|
||||
};
|
||||
($Small:ty => $Large:ty, #[$attr:meta], $doc:expr $(,)?) => {
|
||||
#[$attr]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<$Small> for $Large {
|
||||
// Rustdocs on the impl block show a "[+] show undocumented items" toggle.
|
||||
// Rustdocs on functions do not.
|
||||
@@ -201,7 +201,7 @@ macro_rules! impl_float_from_bool {
|
||||
)?
|
||||
) => {
|
||||
#[stable(feature = "float_from_bool", since = "1.68.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<bool> for $float {
|
||||
#[doc = concat!("Converts a [`bool`] to [`", stringify!($float),"`] losslessly.")]
|
||||
/// The resulting value is positive `0.0` for `false` and `1.0` for `true` values.
|
||||
@@ -252,7 +252,7 @@ impl_float_from_bool!(
|
||||
macro_rules! impl_try_from_unbounded {
|
||||
($source:ty => $($target:ty),+) => {$(
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const TryFrom<$source> for $target {
|
||||
type Error = TryFromIntError;
|
||||
|
||||
@@ -271,7 +271,7 @@ macro_rules! impl_try_from_unbounded {
|
||||
macro_rules! impl_try_from_lower_bounded {
|
||||
($source:ty => $($target:ty),+) => {$(
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const TryFrom<$source> for $target {
|
||||
type Error = TryFromIntError;
|
||||
|
||||
@@ -294,7 +294,7 @@ macro_rules! impl_try_from_lower_bounded {
|
||||
macro_rules! impl_try_from_upper_bounded {
|
||||
($source:ty => $($target:ty),+) => {$(
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const TryFrom<$source> for $target {
|
||||
type Error = TryFromIntError;
|
||||
|
||||
@@ -317,7 +317,7 @@ macro_rules! impl_try_from_upper_bounded {
|
||||
macro_rules! impl_try_from_both_bounded {
|
||||
($source:ty => $($target:ty),+) => {$(
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const TryFrom<$source> for $target {
|
||||
type Error = TryFromIntError;
|
||||
|
||||
@@ -456,7 +456,7 @@ use crate::num::NonZero;
|
||||
macro_rules! impl_nonzero_int_from_nonzero_int {
|
||||
($Small:ty => $Large:ty) => {
|
||||
#[stable(feature = "nz_int_conv", since = "1.41.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<NonZero<$Small>> for NonZero<$Large> {
|
||||
// Rustdocs on the impl block show a "[+] show undocumented items" toggle.
|
||||
// Rustdocs on functions do not.
|
||||
@@ -515,7 +515,8 @@ impl_nonzero_int_from_nonzero_int!(u64 => i128);
|
||||
macro_rules! impl_nonzero_int_try_from_int {
|
||||
($Int:ty) => {
|
||||
#[stable(feature = "nzint_try_from_int_conv", since = "1.46.0")]
|
||||
impl TryFrom<$Int> for NonZero<$Int> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const TryFrom<$Int> for NonZero<$Int> {
|
||||
type Error = TryFromIntError;
|
||||
|
||||
// Rustdocs on the impl block show a "[+] show undocumented items" toggle.
|
||||
@@ -547,7 +548,7 @@ impl_nonzero_int_try_from_int!(isize);
|
||||
macro_rules! impl_nonzero_int_try_from_nonzero_int {
|
||||
($source:ty => $($target:ty),+) => {$(
|
||||
#[stable(feature = "nzint_try_from_nzint_conv", since = "1.49.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const TryFrom<NonZero<$source>> for NonZero<$target> {
|
||||
type Error = TryFromIntError;
|
||||
|
||||
|
||||
@@ -708,7 +708,8 @@ impl ops::Index<ops::RangeFrom<usize>> for CStr {
|
||||
}
|
||||
|
||||
#[stable(feature = "cstring_asref", since = "1.7.0")]
|
||||
impl AsRef<CStr> for CStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsRef<CStr> for CStr {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &CStr {
|
||||
self
|
||||
|
||||
@@ -258,7 +258,8 @@ impl<T: ?Sized> ManuallyDrop<T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "manually_drop", since = "1.20.0")]
|
||||
impl<T: ?Sized> Deref for ManuallyDrop<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const Deref for ManuallyDrop<T> {
|
||||
type Target = T;
|
||||
#[inline(always)]
|
||||
fn deref(&self) -> &T {
|
||||
@@ -267,7 +268,8 @@ impl<T: ?Sized> Deref for ManuallyDrop<T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "manually_drop", since = "1.20.0")]
|
||||
impl<T: ?Sized> DerefMut for ManuallyDrop<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const DerefMut for ManuallyDrop<T> {
|
||||
#[inline(always)]
|
||||
fn deref_mut(&mut self) -> &mut T {
|
||||
&mut self.value
|
||||
|
||||
@@ -1087,7 +1087,7 @@ impl fmt::Debug for IpAddr {
|
||||
}
|
||||
|
||||
#[stable(feature = "ip_from_ip", since = "1.16.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<Ipv4Addr> for IpAddr {
|
||||
/// Copies this address to a new `IpAddr::V4`.
|
||||
///
|
||||
@@ -1110,7 +1110,7 @@ impl const From<Ipv4Addr> for IpAddr {
|
||||
}
|
||||
|
||||
#[stable(feature = "ip_from_ip", since = "1.16.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<Ipv6Addr> for IpAddr {
|
||||
/// Copies this address to a new `IpAddr::V6`.
|
||||
///
|
||||
@@ -1221,7 +1221,7 @@ impl Ord for Ipv4Addr {
|
||||
}
|
||||
|
||||
#[stable(feature = "ip_u32", since = "1.1.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<Ipv4Addr> for u32 {
|
||||
/// Uses [`Ipv4Addr::to_bits`] to convert an IPv4 address to a host byte order `u32`.
|
||||
#[inline]
|
||||
@@ -1231,7 +1231,7 @@ impl const From<Ipv4Addr> for u32 {
|
||||
}
|
||||
|
||||
#[stable(feature = "ip_u32", since = "1.1.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<u32> for Ipv4Addr {
|
||||
/// Uses [`Ipv4Addr::from_bits`] to convert a host byte order `u32` into an IPv4 address.
|
||||
#[inline]
|
||||
@@ -1241,7 +1241,7 @@ impl const From<u32> for Ipv4Addr {
|
||||
}
|
||||
|
||||
#[stable(feature = "from_slice_v4", since = "1.9.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<[u8; 4]> for Ipv4Addr {
|
||||
/// Creates an `Ipv4Addr` from a four element byte array.
|
||||
///
|
||||
@@ -1260,7 +1260,7 @@ impl const From<[u8; 4]> for Ipv4Addr {
|
||||
}
|
||||
|
||||
#[stable(feature = "ip_from_slice", since = "1.17.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<[u8; 4]> for IpAddr {
|
||||
/// Creates an `IpAddr::V4` from a four element byte array.
|
||||
///
|
||||
@@ -2215,7 +2215,7 @@ impl Ord for Ipv6Addr {
|
||||
}
|
||||
|
||||
#[stable(feature = "i128", since = "1.26.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<Ipv6Addr> for u128 {
|
||||
/// Uses [`Ipv6Addr::to_bits`] to convert an IPv6 address to a host byte order `u128`.
|
||||
#[inline]
|
||||
@@ -2224,7 +2224,7 @@ impl const From<Ipv6Addr> for u128 {
|
||||
}
|
||||
}
|
||||
#[stable(feature = "i128", since = "1.26.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<u128> for Ipv6Addr {
|
||||
/// Uses [`Ipv6Addr::from_bits`] to convert a host byte order `u128` to an IPv6 address.
|
||||
#[inline]
|
||||
@@ -2234,7 +2234,7 @@ impl const From<u128> for Ipv6Addr {
|
||||
}
|
||||
|
||||
#[stable(feature = "ipv6_from_octets", since = "1.9.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<[u8; 16]> for Ipv6Addr {
|
||||
/// Creates an `Ipv6Addr` from a sixteen element byte array.
|
||||
///
|
||||
@@ -2262,7 +2262,7 @@ impl const From<[u8; 16]> for Ipv6Addr {
|
||||
}
|
||||
|
||||
#[stable(feature = "ipv6_from_segments", since = "1.16.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<[u16; 8]> for Ipv6Addr {
|
||||
/// Creates an `Ipv6Addr` from an eight element 16-bit array.
|
||||
///
|
||||
@@ -2291,7 +2291,7 @@ impl const From<[u16; 8]> for Ipv6Addr {
|
||||
}
|
||||
|
||||
#[stable(feature = "ip_from_slice", since = "1.17.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<[u8; 16]> for IpAddr {
|
||||
/// Creates an `IpAddr::V6` from a sixteen element byte array.
|
||||
///
|
||||
@@ -2319,7 +2319,7 @@ impl const From<[u8; 16]> for IpAddr {
|
||||
}
|
||||
|
||||
#[stable(feature = "ip_from_slice", since = "1.17.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<[u16; 8]> for IpAddr {
|
||||
/// Creates an `IpAddr::V6` from an eight element 16-bit array.
|
||||
///
|
||||
|
||||
@@ -592,7 +592,7 @@ impl SocketAddrV6 {
|
||||
}
|
||||
|
||||
#[stable(feature = "ip_from_ip", since = "1.16.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<SocketAddrV4> for SocketAddr {
|
||||
/// Converts a [`SocketAddrV4`] into a [`SocketAddr::V4`].
|
||||
#[inline]
|
||||
@@ -602,7 +602,7 @@ impl const From<SocketAddrV4> for SocketAddr {
|
||||
}
|
||||
|
||||
#[stable(feature = "ip_from_ip", since = "1.16.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<SocketAddrV6> for SocketAddr {
|
||||
/// Converts a [`SocketAddrV6`] into a [`SocketAddr::V6`].
|
||||
#[inline]
|
||||
@@ -612,7 +612,7 @@ impl const From<SocketAddrV6> for SocketAddr {
|
||||
}
|
||||
|
||||
#[stable(feature = "addr_from_into_ip", since = "1.17.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<I: [const] Into<IpAddr>> const From<(I, u16)> for SocketAddr {
|
||||
/// Converts a tuple struct (Into<[`IpAddr`]>, `u16`) into a [`SocketAddr`].
|
||||
///
|
||||
|
||||
@@ -20,7 +20,7 @@ impl fmt::Display for TryFromIntError {
|
||||
impl Error for TryFromIntError {}
|
||||
|
||||
#[stable(feature = "try_from", since = "1.34.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<Infallible> for TryFromIntError {
|
||||
fn from(x: Infallible) -> TryFromIntError {
|
||||
match x {}
|
||||
@@ -28,7 +28,7 @@ impl const From<Infallible> for TryFromIntError {
|
||||
}
|
||||
|
||||
#[unstable(feature = "never_type", issue = "35121")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<!> for TryFromIntError {
|
||||
#[inline]
|
||||
fn from(never: !) -> TryFromIntError {
|
||||
|
||||
@@ -1378,7 +1378,7 @@ const fn from_ascii_radix_panic(radix: u32) -> ! {
|
||||
macro_rules! from_str_int_impl {
|
||||
($signedness:ident $($int_ty:ty)+) => {$(
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const FromStr for $int_ty {
|
||||
type Err = ParseIntError;
|
||||
|
||||
|
||||
@@ -297,7 +297,7 @@ where
|
||||
}
|
||||
|
||||
#[stable(feature = "from_nonzero", since = "1.31.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<NonZero<T>> for T
|
||||
where
|
||||
T: ZeroablePrimitive,
|
||||
|
||||
@@ -136,7 +136,7 @@ use crate::marker::PointeeSized;
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_diagnostic_item = "Deref"]
|
||||
#[const_trait]
|
||||
#[rustc_const_unstable(feature = "const_deref", issue = "88955")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub trait Deref: PointeeSized {
|
||||
/// The resulting type after dereferencing.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
@@ -152,7 +152,7 @@ pub trait Deref: PointeeSized {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_deref", issue = "88955")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const Deref for &T {
|
||||
type Target = T;
|
||||
|
||||
@@ -166,7 +166,7 @@ impl<T: ?Sized> const Deref for &T {
|
||||
impl<T: ?Sized> !DerefMut for &T {}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_deref", issue = "88955")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const Deref for &mut T {
|
||||
type Target = T;
|
||||
|
||||
@@ -268,7 +268,7 @@ impl<T: ?Sized> const Deref for &mut T {
|
||||
#[doc(alias = "*")]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[const_trait]
|
||||
#[rustc_const_unstable(feature = "const_deref", issue = "88955")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub trait DerefMut: [const] Deref + PointeeSized {
|
||||
/// Mutably dereferences the value.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
@@ -277,7 +277,7 @@ pub trait DerefMut: [const] Deref + PointeeSized {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_deref", issue = "88955")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: ?Sized> const DerefMut for &mut T {
|
||||
fn deref_mut(&mut self) -> &mut T {
|
||||
self
|
||||
|
||||
@@ -1379,11 +1379,12 @@ impl<T> Option<T> {
|
||||
/// ```
|
||||
#[inline]
|
||||
#[stable(feature = "option_deref", since = "1.40.0")]
|
||||
pub fn as_deref(&self) -> Option<&T::Target>
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn as_deref(&self) -> Option<&T::Target>
|
||||
where
|
||||
T: Deref,
|
||||
T: [const] Deref,
|
||||
{
|
||||
self.as_ref().map(|t| t.deref())
|
||||
self.as_ref().map(Deref::deref)
|
||||
}
|
||||
|
||||
/// Converts from `Option<T>` (or `&mut Option<T>`) to `Option<&mut T::Target>`.
|
||||
@@ -1402,11 +1403,12 @@ impl<T> Option<T> {
|
||||
/// ```
|
||||
#[inline]
|
||||
#[stable(feature = "option_deref", since = "1.40.0")]
|
||||
pub fn as_deref_mut(&mut self) -> Option<&mut T::Target>
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn as_deref_mut(&mut self) -> Option<&mut T::Target>
|
||||
where
|
||||
T: DerefMut,
|
||||
T: [const] DerefMut,
|
||||
{
|
||||
self.as_mut().map(|t| t.deref_mut())
|
||||
self.as_mut().map(DerefMut::deref_mut)
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
@@ -2180,7 +2182,7 @@ const fn expect_failed(msg: &str) -> ! {
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_clone", issue = "142757")]
|
||||
impl<T> const Clone for Option<T>
|
||||
where
|
||||
// FIXME(const_hack): the T: ~const Destruct should be inferred from the Self: ~const Destruct in clone_from.
|
||||
@@ -2269,7 +2271,7 @@ impl<'a, T> IntoIterator for &'a mut Option<T> {
|
||||
}
|
||||
|
||||
#[stable(since = "1.12.0", feature = "option_from")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<T> for Option<T> {
|
||||
/// Moves `val` into a new [`Some`].
|
||||
///
|
||||
@@ -2286,7 +2288,7 @@ impl<T> const From<T> for Option<T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "option_ref_from_ref_option", since = "1.30.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<'a, T> const From<&'a Option<T>> for Option<&'a T> {
|
||||
/// Converts from `&Option<T>` to `Option<&T>`.
|
||||
///
|
||||
@@ -2314,7 +2316,7 @@ impl<'a, T> const From<&'a Option<T>> for Option<&'a T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "option_ref_from_ref_option", since = "1.30.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<'a, T> const From<&'a mut Option<T>> for Option<&'a mut T> {
|
||||
/// Converts from `&mut Option<T>` to `Option<&mut T>`
|
||||
///
|
||||
|
||||
@@ -248,7 +248,8 @@ impl RefUnwindSafe for crate::sync::atomic::AtomicBool {}
|
||||
impl<T> RefUnwindSafe for crate::sync::atomic::AtomicPtr<T> {}
|
||||
|
||||
#[stable(feature = "catch_unwind", since = "1.9.0")]
|
||||
impl<T> Deref for AssertUnwindSafe<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const Deref for AssertUnwindSafe<T> {
|
||||
type Target = T;
|
||||
|
||||
fn deref(&self) -> &T {
|
||||
@@ -257,7 +258,8 @@ impl<T> Deref for AssertUnwindSafe<T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "catch_unwind", since = "1.9.0")]
|
||||
impl<T> DerefMut for AssertUnwindSafe<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const DerefMut for AssertUnwindSafe<T> {
|
||||
fn deref_mut(&mut self) -> &mut T {
|
||||
&mut self.0
|
||||
}
|
||||
|
||||
@@ -1359,7 +1359,11 @@ impl<Ptr: Deref> Pin<Ptr> {
|
||||
/// ruled out by the contract of `Pin::new_unchecked`.
|
||||
#[stable(feature = "pin", since = "1.33.0")]
|
||||
#[inline(always)]
|
||||
pub fn as_ref(&self) -> Pin<&Ptr::Target> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn as_ref(&self) -> Pin<&Ptr::Target>
|
||||
where
|
||||
Ptr: [const] Deref,
|
||||
{
|
||||
// SAFETY: see documentation on this function
|
||||
unsafe { Pin::new_unchecked(&*self.pointer) }
|
||||
}
|
||||
@@ -1403,7 +1407,11 @@ impl<Ptr: DerefMut> Pin<Ptr> {
|
||||
/// ```
|
||||
#[stable(feature = "pin", since = "1.33.0")]
|
||||
#[inline(always)]
|
||||
pub fn as_mut(&mut self) -> Pin<&mut Ptr::Target> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn as_mut(&mut self) -> Pin<&mut Ptr::Target>
|
||||
where
|
||||
Ptr: [const] DerefMut,
|
||||
{
|
||||
// SAFETY: see documentation on this function
|
||||
unsafe { Pin::new_unchecked(&mut *self.pointer) }
|
||||
}
|
||||
@@ -1418,7 +1426,11 @@ impl<Ptr: DerefMut> Pin<Ptr> {
|
||||
#[stable(feature = "pin_deref_mut", since = "1.84.0")]
|
||||
#[must_use = "`self` will be dropped if the result is not used"]
|
||||
#[inline(always)]
|
||||
pub fn as_deref_mut(self: Pin<&mut Self>) -> Pin<&mut Ptr::Target> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn as_deref_mut(self: Pin<&mut Self>) -> Pin<&mut Ptr::Target>
|
||||
where
|
||||
Ptr: [const] DerefMut,
|
||||
{
|
||||
// SAFETY: What we're asserting here is that going from
|
||||
//
|
||||
// Pin<&mut Pin<Ptr>>
|
||||
@@ -1669,7 +1681,8 @@ impl<T: ?Sized> Pin<&'static mut T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "pin", since = "1.33.0")]
|
||||
impl<Ptr: Deref> Deref for Pin<Ptr> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<Ptr: [const] Deref> const Deref for Pin<Ptr> {
|
||||
type Target = Ptr::Target;
|
||||
fn deref(&self) -> &Ptr::Target {
|
||||
Pin::get_ref(Pin::as_ref(self))
|
||||
@@ -1677,7 +1690,8 @@ impl<Ptr: Deref> Deref for Pin<Ptr> {
|
||||
}
|
||||
|
||||
#[stable(feature = "pin", since = "1.33.0")]
|
||||
impl<Ptr: DerefMut<Target: Unpin>> DerefMut for Pin<Ptr> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<Ptr: [const] DerefMut<Target: Unpin>> const DerefMut for Pin<Ptr> {
|
||||
fn deref_mut(&mut self) -> &mut Ptr::Target {
|
||||
Pin::get_mut(Pin::as_mut(self))
|
||||
}
|
||||
|
||||
@@ -148,7 +148,8 @@ impl<T: Default> Default for UnsafePinned<T> {
|
||||
}
|
||||
|
||||
#[unstable(feature = "unsafe_pinned", issue = "125735")]
|
||||
impl<T> From<T> for UnsafePinned<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<T> for UnsafePinned<T> {
|
||||
/// Creates a new `UnsafePinned<T>` containing the given value.
|
||||
fn from(value: T) -> Self {
|
||||
UnsafePinned::new(value)
|
||||
|
||||
@@ -171,7 +171,8 @@ impl fmt::Debug for Alignment {
|
||||
}
|
||||
|
||||
#[unstable(feature = "ptr_alignment_type", issue = "102070")]
|
||||
impl TryFrom<NonZero<usize>> for Alignment {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const TryFrom<NonZero<usize>> for Alignment {
|
||||
type Error = num::TryFromIntError;
|
||||
|
||||
#[inline]
|
||||
@@ -181,7 +182,8 @@ impl TryFrom<NonZero<usize>> for Alignment {
|
||||
}
|
||||
|
||||
#[unstable(feature = "ptr_alignment_type", issue = "102070")]
|
||||
impl TryFrom<usize> for Alignment {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const TryFrom<usize> for Alignment {
|
||||
type Error = num::TryFromIntError;
|
||||
|
||||
#[inline]
|
||||
@@ -191,7 +193,7 @@ impl TryFrom<usize> for Alignment {
|
||||
}
|
||||
|
||||
#[unstable(feature = "ptr_alignment_type", issue = "102070")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<Alignment> for NonZero<usize> {
|
||||
#[inline]
|
||||
fn from(align: Alignment) -> NonZero<usize> {
|
||||
@@ -200,7 +202,7 @@ impl const From<Alignment> for NonZero<usize> {
|
||||
}
|
||||
|
||||
#[unstable(feature = "ptr_alignment_type", issue = "102070")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<Alignment> for usize {
|
||||
#[inline]
|
||||
fn from(align: Alignment) -> usize {
|
||||
|
||||
@@ -1711,7 +1711,8 @@ impl<T: PointeeSized> hash::Hash for NonNull<T> {
|
||||
}
|
||||
|
||||
#[unstable(feature = "ptr_internals", issue = "none")]
|
||||
impl<T: PointeeSized> From<Unique<T>> for NonNull<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: PointeeSized> const From<Unique<T>> for NonNull<T> {
|
||||
#[inline]
|
||||
fn from(unique: Unique<T>) -> Self {
|
||||
unique.as_non_null_ptr()
|
||||
@@ -1719,7 +1720,8 @@ impl<T: PointeeSized> From<Unique<T>> for NonNull<T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "nonnull", since = "1.25.0")]
|
||||
impl<T: PointeeSized> From<&mut T> for NonNull<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: PointeeSized> const From<&mut T> for NonNull<T> {
|
||||
/// Converts a `&mut T` to a `NonNull<T>`.
|
||||
///
|
||||
/// This conversion is safe and infallible since references cannot be null.
|
||||
@@ -1730,7 +1732,8 @@ impl<T: PointeeSized> From<&mut T> for NonNull<T> {
|
||||
}
|
||||
|
||||
#[stable(feature = "nonnull", since = "1.25.0")]
|
||||
impl<T: PointeeSized> From<&T> for NonNull<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: PointeeSized> const From<&T> for NonNull<T> {
|
||||
/// Converts a `&T` to a `NonNull<T>`.
|
||||
///
|
||||
/// This conversion is safe and infallible since references cannot be null.
|
||||
|
||||
@@ -189,7 +189,8 @@ impl<T: PointeeSized> fmt::Pointer for Unique<T> {
|
||||
}
|
||||
|
||||
#[unstable(feature = "ptr_internals", issue = "none")]
|
||||
impl<T: PointeeSized> From<&mut T> for Unique<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: PointeeSized> const From<&mut T> for Unique<T> {
|
||||
/// Converts a `&mut T` to a `Unique<T>`.
|
||||
///
|
||||
/// This conversion is infallible since references cannot be null.
|
||||
@@ -200,7 +201,8 @@ impl<T: PointeeSized> From<&mut T> for Unique<T> {
|
||||
}
|
||||
|
||||
#[unstable(feature = "ptr_internals", issue = "none")]
|
||||
impl<T: PointeeSized> From<NonNull<T>> for Unique<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T: PointeeSized> const From<NonNull<T>> for Unique<T> {
|
||||
/// Converts a `NonNull<T>` to a `Unique<T>`.
|
||||
///
|
||||
/// This conversion is infallible since `NonNull` cannot be null.
|
||||
|
||||
@@ -192,7 +192,7 @@ impl<T> IntoBounds<T> for Range<T> {
|
||||
}
|
||||
|
||||
#[unstable(feature = "new_range_api", issue = "125687")]
|
||||
#[rustc_const_unstable(feature = "const_index", issue = "143775")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<Range<T>> for legacy::Range<T> {
|
||||
#[inline]
|
||||
fn from(value: Range<T>) -> Self {
|
||||
@@ -201,7 +201,7 @@ impl<T> const From<Range<T>> for legacy::Range<T> {
|
||||
}
|
||||
|
||||
#[unstable(feature = "new_range_api", issue = "125687")]
|
||||
#[rustc_const_unstable(feature = "const_index", issue = "143775")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<legacy::Range<T>> for Range<T> {
|
||||
#[inline]
|
||||
fn from(value: legacy::Range<T>) -> Self {
|
||||
@@ -377,7 +377,7 @@ impl<T> IntoBounds<T> for RangeInclusive<T> {
|
||||
}
|
||||
|
||||
#[unstable(feature = "new_range_api", issue = "125687")]
|
||||
#[rustc_const_unstable(feature = "const_index", issue = "143775")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<RangeInclusive<T>> for legacy::RangeInclusive<T> {
|
||||
#[inline]
|
||||
fn from(value: RangeInclusive<T>) -> Self {
|
||||
@@ -385,7 +385,8 @@ impl<T> const From<RangeInclusive<T>> for legacy::RangeInclusive<T> {
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "new_range_api", issue = "125687")]
|
||||
impl<T> From<legacy::RangeInclusive<T>> for RangeInclusive<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<legacy::RangeInclusive<T>> for RangeInclusive<T> {
|
||||
#[inline]
|
||||
fn from(value: legacy::RangeInclusive<T>) -> Self {
|
||||
assert!(
|
||||
|
||||
@@ -1034,11 +1034,12 @@ impl<T, E> Result<T, E> {
|
||||
/// ```
|
||||
#[inline]
|
||||
#[stable(feature = "inner_deref", since = "1.47.0")]
|
||||
pub fn as_deref(&self) -> Result<&T::Target, &E>
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn as_deref(&self) -> Result<&T::Target, &E>
|
||||
where
|
||||
T: Deref,
|
||||
T: [const] Deref,
|
||||
{
|
||||
self.as_ref().map(|t| t.deref())
|
||||
self.as_ref().map(Deref::deref)
|
||||
}
|
||||
|
||||
/// Converts from `Result<T, E>` (or `&mut Result<T, E>`) to `Result<&mut <T as DerefMut>::Target, &mut E>`.
|
||||
@@ -1061,11 +1062,12 @@ impl<T, E> Result<T, E> {
|
||||
/// ```
|
||||
#[inline]
|
||||
#[stable(feature = "inner_deref", since = "1.47.0")]
|
||||
pub fn as_deref_mut(&mut self) -> Result<&mut T::Target, &mut E>
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn as_deref_mut(&mut self) -> Result<&mut T::Target, &mut E>
|
||||
where
|
||||
T: DerefMut,
|
||||
T: [const] DerefMut,
|
||||
{
|
||||
self.as_mut().map(|t| t.deref_mut())
|
||||
self.as_mut().map(DerefMut::deref_mut)
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
@@ -1347,7 +1349,7 @@ impl<T, E> Result<T, E> {
|
||||
#[unstable(feature = "unwrap_infallible", reason = "newly added", issue = "61695")]
|
||||
#[inline]
|
||||
#[rustc_allow_const_fn_unstable(const_precise_live_drops)]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn into_ok(self) -> T
|
||||
where
|
||||
E: [const] Into<!>,
|
||||
@@ -1384,7 +1386,7 @@ impl<T, E> Result<T, E> {
|
||||
#[unstable(feature = "unwrap_infallible", reason = "newly added", issue = "61695")]
|
||||
#[inline]
|
||||
#[rustc_allow_const_fn_unstable(const_precise_live_drops)]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn into_err(self) -> E
|
||||
where
|
||||
T: [const] Into<!>,
|
||||
|
||||
@@ -3078,7 +3078,8 @@ impl str {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl AsRef<[u8]> for str {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsRef<[u8]> for str {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &[u8] {
|
||||
self.as_bytes()
|
||||
|
||||
@@ -826,7 +826,7 @@ unsafe impl const SliceIndex<str> for ops::RangeToInclusive<usize> {
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[const_trait]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub trait FromStr: Sized {
|
||||
/// The associated error which can be returned from parsing.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
||||
@@ -2523,7 +2523,7 @@ impl<T> AtomicPtr<T> {
|
||||
|
||||
#[cfg(target_has_atomic_load_store = "8")]
|
||||
#[stable(feature = "atomic_bool_from", since = "1.24.0")]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<bool> for AtomicBool {
|
||||
/// Converts a `bool` into an `AtomicBool`.
|
||||
///
|
||||
@@ -2542,7 +2542,8 @@ impl const From<bool> for AtomicBool {
|
||||
|
||||
#[cfg(target_has_atomic_load_store = "ptr")]
|
||||
#[stable(feature = "atomic_from", since = "1.23.0")]
|
||||
impl<T> From<*mut T> for AtomicPtr<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<*mut T> for AtomicPtr<T> {
|
||||
/// Converts a `*mut T` into an `AtomicPtr<T>`.
|
||||
#[inline]
|
||||
fn from(p: *mut T) -> Self {
|
||||
@@ -2621,7 +2622,7 @@ macro_rules! atomic_int {
|
||||
}
|
||||
|
||||
#[$stable_from]
|
||||
#[rustc_const_unstable(feature = "const_try", issue = "74935")]
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const From<$int_type> for $atomic_type {
|
||||
#[doc = concat!("Converts an `", stringify!($int_type), "` into an `", stringify!($atomic_type), "`.")]
|
||||
#[inline]
|
||||
|
||||
@@ -163,7 +163,8 @@ impl<T: ?Sized> Exclusive<T> {
|
||||
}
|
||||
|
||||
#[unstable(feature = "exclusive_wrapper", issue = "98407")]
|
||||
impl<T> From<T> for Exclusive<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<T> for Exclusive<T> {
|
||||
#[inline]
|
||||
fn from(t: T) -> Self {
|
||||
Self::new(t)
|
||||
|
||||
@@ -215,7 +215,8 @@ impl<T, E> Poll<Option<Result<T, E>>> {
|
||||
}
|
||||
|
||||
#[stable(feature = "futures_api", since = "1.36.0")]
|
||||
impl<T> From<T> for Poll<T> {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl<T> const From<T> for Poll<T> {
|
||||
/// Moves the value into a [`Poll::Ready`] to make a `Poll<T>`.
|
||||
///
|
||||
/// # Example
|
||||
|
||||
@@ -901,7 +901,8 @@ impl Clone for LocalWaker {
|
||||
}
|
||||
|
||||
#[unstable(feature = "local_waker", issue = "118959")]
|
||||
impl AsRef<LocalWaker> for Waker {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsRef<LocalWaker> for Waker {
|
||||
fn as_ref(&self) -> &LocalWaker {
|
||||
// SAFETY: LocalWaker is just Waker without thread safety
|
||||
unsafe { transmute(self) }
|
||||
|
||||
@@ -133,6 +133,7 @@ macro_rules! tuple_impls {
|
||||
maybe_tuple_doc! {
|
||||
$($T)+ @
|
||||
#[stable(feature = "array_tuple_conv", since = "1.71.0")]
|
||||
// can't do const From due to https://github.com/rust-lang/rust/issues/144280
|
||||
impl<T> From<[T; ${count($T)}]> for ($(${ignore($T)} T,)+) {
|
||||
#[inline]
|
||||
#[allow(non_snake_case)]
|
||||
@@ -146,6 +147,7 @@ macro_rules! tuple_impls {
|
||||
maybe_tuple_doc! {
|
||||
$($T)+ @
|
||||
#[stable(feature = "array_tuple_conv", since = "1.71.0")]
|
||||
// can't do const From due to https://github.com/rust-lang/rust/issues/144280
|
||||
impl<T> From<($(${ignore($T)} T,)+)> for [T; ${count($T)}] {
|
||||
#[inline]
|
||||
#[allow(non_snake_case)]
|
||||
|
||||
@@ -15,10 +15,9 @@
|
||||
#![feature(cfg_target_has_reliable_f16_f128)]
|
||||
#![feature(char_max_len)]
|
||||
#![feature(clone_to_uninit)]
|
||||
#![feature(const_deref)]
|
||||
#![feature(const_convert)]
|
||||
#![feature(const_destruct)]
|
||||
#![feature(const_eval_select)]
|
||||
#![feature(const_from)]
|
||||
#![feature(const_ops)]
|
||||
#![feature(const_option_ops)]
|
||||
#![feature(const_ref_cell)]
|
||||
|
||||
@@ -828,7 +828,8 @@ impl OsStr {
|
||||
/// ```
|
||||
#[inline]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn new<S: AsRef<OsStr> + ?Sized>(s: &S) -> &OsStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn new<S: [const] AsRef<OsStr> + ?Sized>(s: &S) -> &OsStr {
|
||||
s.as_ref()
|
||||
}
|
||||
|
||||
@@ -876,14 +877,16 @@ impl OsStr {
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn from_inner(inner: &Slice) -> &OsStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
const fn from_inner(inner: &Slice) -> &OsStr {
|
||||
// SAFETY: OsStr is just a wrapper of Slice,
|
||||
// therefore converting &Slice to &OsStr is safe.
|
||||
unsafe { &*(inner as *const Slice as *const OsStr) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn from_inner_mut(inner: &mut Slice) -> &mut OsStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
const fn from_inner_mut(inner: &mut Slice) -> &mut OsStr {
|
||||
// SAFETY: OsStr is just a wrapper of Slice,
|
||||
// therefore converting &mut Slice to &mut OsStr is safe.
|
||||
// Any method that mutates OsStr must be careful not to
|
||||
@@ -1681,7 +1684,8 @@ impl ToOwned for OsStr {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl AsRef<OsStr> for OsStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsRef<OsStr> for OsStr {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &OsStr {
|
||||
self
|
||||
|
||||
@@ -334,6 +334,7 @@
|
||||
#![feature(char_internals)]
|
||||
#![feature(clone_to_uninit)]
|
||||
#![feature(const_cmp)]
|
||||
#![feature(const_convert)]
|
||||
#![feature(const_ops)]
|
||||
#![feature(const_option_ops)]
|
||||
#![feature(const_try)]
|
||||
|
||||
@@ -2264,11 +2264,13 @@ impl Path {
|
||||
/// assert_eq!(from_string, from_path);
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn new<S: AsRef<OsStr> + ?Sized>(s: &S) -> &Path {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
pub const fn new<S: [const] AsRef<OsStr> + ?Sized>(s: &S) -> &Path {
|
||||
unsafe { &*(s.as_ref() as *const OsStr as *const Path) }
|
||||
}
|
||||
|
||||
fn from_inner_mut(inner: &mut OsStr) -> &mut Path {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
const fn from_inner_mut(inner: &mut OsStr) -> &mut Path {
|
||||
// SAFETY: Path is just a wrapper around OsStr,
|
||||
// therefore converting &mut OsStr to &mut Path is safe.
|
||||
unsafe { &mut *(inner as *mut OsStr as *mut Path) }
|
||||
@@ -3337,7 +3339,8 @@ unsafe impl CloneToUninit for Path {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl AsRef<OsStr> for Path {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsRef<OsStr> for Path {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &OsStr {
|
||||
&self.inner
|
||||
@@ -3507,7 +3510,8 @@ impl Ord for Path {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl AsRef<Path> for Path {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsRef<Path> for Path {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &Path {
|
||||
self
|
||||
@@ -3515,7 +3519,8 @@ impl AsRef<Path> for Path {
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl AsRef<Path> for OsStr {
|
||||
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
|
||||
impl const AsRef<Path> for OsStr {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &Path {
|
||||
Path::new(self)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//@ check-pass
|
||||
|
||||
#![feature(const_deref)]
|
||||
#![feature(const_convert)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
use std::ops::Deref;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#![feature(const_trait_impl, const_from)]
|
||||
#![feature(const_trait_impl, const_convert)]
|
||||
|
||||
//@ check-pass
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//@ compile-flags: -Znext-solver
|
||||
#![feature(const_from, never_type, const_trait_impl)]
|
||||
#![feature(const_convert, never_type, const_trait_impl)]
|
||||
|
||||
const fn impls_from<T: ~const From<!>>() {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user