From 70f7165cc8975337964118af4d30f40b98f5edeb Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Wed, 14 Jan 2015 16:08:07 -0800 Subject: 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` is allowed today it does not allow downcasting of trait objects like `Box` (those returned from `Thread::join`). This is covered by #18737. * `BoxAny::downcast` is now stable. --- src/liballoc/boxed.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/liballoc') 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> Hash for Box { } /// 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`"] +#[unstable = "this trait will likely disappear once compiler bugs blocking \ + a direct impl on `Box` have been fixed "] +// FIXME(#18737): this should be a direct impl on `Box`. If you're +// removing this please make sure that you can downcase on +// `Box` as well as `Box` 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(self) -> Result, Self>; } +#[stable] impl BoxAny for Box { #[inline] - #[unstable = "method may be renamed with respect to other downcasting \ - methods"] fn downcast(self) -> Result, Box> { if self.is::() { unsafe { -- cgit 1.4.1-3-g733a5