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.
This commit is contained in:
bors 2015-01-19 23:35:12 +00:00
commit 65b61ffb3f
16 changed files with 105 additions and 108 deletions

View file

@ -10,11 +10,9 @@
#![feature(intrinsics)]
use std::intrinsics::TypeId;
extern "rust-intrinsic" {
// Real example from libcore
fn type_id<T: ?Sized + 'static>() -> TypeId;
fn type_id<T: ?Sized + 'static>() -> u64;
// Silent bounds made explicit to make sure they are actually
// resolved.

View file

@ -11,7 +11,7 @@
#![feature(unboxed_closures)]
use std::any::Any;
use std::intrinsics::TypeId;
use std::any::TypeId;
pub trait Pt {}
pub trait Rt {}