diff options
Diffstat (limited to 'library/alloc/src')
| -rw-r--r-- | library/alloc/src/ffi/c_str.rs | 22 | ||||
| -rw-r--r-- | library/alloc/src/rc.rs | 21 | ||||
| -rw-r--r-- | library/alloc/src/sync.rs | 21 | 
3 files changed, 64 insertions, 0 deletions
| diff --git a/library/alloc/src/ffi/c_str.rs b/library/alloc/src/ffi/c_str.rs index f143e557871..19dd90eb81f 100644 --- a/library/alloc/src/ffi/c_str.rs +++ b/library/alloc/src/ffi/c_str.rs @@ -910,6 +910,28 @@ impl From<&CStr> for Rc<CStr> { } } +#[cfg(not(no_global_oom_handling))] +#[stable(feature = "more_rc_default_impls", since = "CURRENT_RUSTC_VERSION")] +impl Default for Arc<CStr> { + /// Creates an empty CStr inside an Arc + #[inline] + fn default() -> Self { + let c_str: &CStr = Default::default(); + Arc::from(c_str) + } +} + +#[cfg(not(no_global_oom_handling))] +#[stable(feature = "more_rc_default_impls", since = "CURRENT_RUSTC_VERSION")] +impl Default for Rc<CStr> { + /// Creates an empty CStr inside an Rc + #[inline] + fn default() -> Self { + let c_str: &CStr = Default::default(); + Rc::from(c_str) + } +} + #[cfg(not(test))] #[stable(feature = "default_box_extra", since = "1.17.0")] impl Default for Box<CStr> { diff --git a/library/alloc/src/rc.rs b/library/alloc/src/rc.rs index 45b20535675..206489876e3 100644 --- a/library/alloc/src/rc.rs +++ b/library/alloc/src/rc.rs @@ -2224,6 +2224,27 @@ impl<T: Default> Default for Rc<T> { } } +#[cfg(not(no_global_oom_handling))] +#[stable(feature = "more_rc_default_impls", since = "CURRENT_RUSTC_VERSION")] +impl Default for Rc<str> { + /// Creates an empty str inside an Rc + #[inline] + fn default() -> Self { + Rc::from("") + } +} + +#[cfg(not(no_global_oom_handling))] +#[stable(feature = "more_rc_default_impls", since = "CURRENT_RUSTC_VERSION")] +impl<T> Default for Rc<[T]> { + /// Creates an empty `[T]` inside an Rc + #[inline] + fn default() -> Self { + let arr: [T; 0] = []; + Rc::from(arr) + } +} + #[stable(feature = "rust1", since = "1.0.0")] trait RcEqIdent<T: ?Sized + PartialEq, A: Allocator> { fn eq(&self, other: &Rc<T, A>) -> bool; diff --git a/library/alloc/src/sync.rs b/library/alloc/src/sync.rs index a35c99849b3..5f6ce80e194 100644 --- a/library/alloc/src/sync.rs +++ b/library/alloc/src/sync.rs @@ -3300,6 +3300,27 @@ impl<T: Default> Default for Arc<T> { } } +#[cfg(not(no_global_oom_handling))] +#[stable(feature = "more_rc_default_impls", since = "CURRENT_RUSTC_VERSION")] +impl Default for Arc<str> { + /// Creates an empty str inside an Arc + #[inline] + fn default() -> Self { + Arc::from("") + } +} + +#[cfg(not(no_global_oom_handling))] +#[stable(feature = "more_rc_default_impls", since = "CURRENT_RUSTC_VERSION")] +impl<T> Default for Arc<[T]> { + /// Creates an empty `[T]` inside an Arc + #[inline] + fn default() -> Self { + let arr: [T; 0] = []; + Arc::from(arr) + } +} + #[stable(feature = "rust1", since = "1.0.0")] impl<T: ?Sized + Hash, A: Allocator> Hash for Arc<T, A> { fn hash<H: Hasher>(&self, state: &mut H) { | 
