diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2015-01-14 16:08:07 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2015-01-18 18:29:22 -0800 |
| commit | 70f7165cc8975337964118af4d30f40b98f5edeb (patch) | |
| tree | eab03b16f4cdbf1652bb99c829469613319ee19e /src/liballoc | |
| parent | dcaeb6aa23ecba2dc2af870668a9239136d20fa3 (diff) | |
| download | rust-70f7165cc8975337964118af4d30f40b98f5edeb.tar.gz rust-70f7165cc8975337964118af4d30f40b98f5edeb.zip | |
std: Stabilize TypeId and tweak BoxAny
This commit aims to stabilize the `TypeId` abstraction by moving it out of the `intrinsics` module into the `any` module of the standard library. Specifically, * `TypeId` is now defined at `std::any::TypeId` * `TypeId::hash` has been removed in favor of an implementation of `Hash`. This commit also performs a final pass over the `any` module, confirming the following: * `Any::get_type_id` remains unstable as *usage* of the `Any` trait will likely never require this, and the `Any` trait does not need to be implemented for any other types. As a result, this implementation detail can remain unstable until associated statics are implemented. * `Any::downcast_ref` is now stable * `Any::downcast_mut` is now stable * `BoxAny` remains unstable. While a direct impl on `Box<Any>` is allowed today it does not allow downcasting of trait objects like `Box<Any + Send>` (those returned from `Thread::join`). This is covered by #18737. * `BoxAny::downcast` is now stable.
Diffstat (limited to 'src/liballoc')
| -rw-r--r-- | src/liballoc/boxed.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/liballoc/boxed.rs b/src/liballoc/boxed.rs index 8ad0c152dc8..a2cc98c7d01 100644 --- a/src/liballoc/boxed.rs +++ b/src/liballoc/boxed.rs @@ -125,8 +125,11 @@ impl<S: hash::Hasher, T: ?Sized + Hash<S>> Hash<S> for Box<T> { } /// Extension methods for an owning `Any` trait object. -#[unstable = "post-DST and coherence changes, this will not be a trait but \ - rather a direct `impl` on `Box<Any>`"] +#[unstable = "this trait will likely disappear once compiler bugs blocking \ + a direct impl on `Box<Any>` have been fixed "] +// FIXME(#18737): this should be a direct impl on `Box<Any>`. If you're +// removing this please make sure that you can downcase on +// `Box<Any + Send>` as well as `Box<Any>` pub trait BoxAny { /// Returns the boxed value if it is of type `T`, or /// `Err(Self)` if it isn't. @@ -134,10 +137,9 @@ pub trait BoxAny { fn downcast<T: 'static>(self) -> Result<Box<T>, Self>; } +#[stable] impl BoxAny for Box<Any> { #[inline] - #[unstable = "method may be renamed with respect to other downcasting \ - methods"] fn downcast<T: 'static>(self) -> Result<Box<T>, Box<Any>> { if self.is::<T>() { unsafe { |
