diff options
| author | bors <bors@rust-lang.org> | 2015-01-19 23:35:12 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-01-19 23:35:12 +0000 |
| commit | 65b61ffb3f55c996eceded6c91281911b671d978 (patch) | |
| tree | d0ab6ddb6042d3fdaf3824372a8e2d6fc9def19a /src/liballoc | |
| parent | 7f8c687fdfbf076ef1667f4d95633d4e0812b516 (diff) | |
| parent | 70f7165cc8975337964118af4d30f40b98f5edeb (diff) | |
| download | rust-65b61ffb3f55c996eceded6c91281911b671d978.tar.gz rust-65b61ffb3f55c996eceded6c91281911b671d978.zip | |
Auto merge of #21165 - alexcrichton:second-pass-type-id, r=aturon
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 { |
