auto merge of #17745 : aturon/rust/revert-any-private, r=alexcrichton

[Previously](e5da6a71a6), the `Any` trait was split into a private portion and an (empty) public portion, in order to hide the implementation strategy used for downcasting. However, the [new rules](e9ad12c0ca) for privacy forbid `AnyPrivate` from actually being private.

This patch thus reverts the introduction of `AnyPrivate`.

Although this is unlikely to break any real code, it removes a public trait and is therefore a:

[breaking-change]
This commit is contained in:
bors 2014-10-07 03:27:12 +00:00
commit 8d702167ba
2 changed files with 2 additions and 9 deletions

View File

@ -91,20 +91,15 @@ pub enum Void { }
/// Every type with no non-`'static` references implements `Any`, so `Any` can
/// be used as a trait object to emulate the effects dynamic typing.
#[stable]
pub trait Any: AnyPrivate + 'static {}
/// An inner trait to ensure that only this module can call `get_type_id()`.
pub trait AnyPrivate {
pub trait Any: 'static {
/// Get the `TypeId` of `self`
fn get_type_id(&self) -> TypeId;
}
impl<T: 'static> AnyPrivate for T {
impl<T: 'static> Any for T {
fn get_type_id(&self) -> TypeId { TypeId::of::<T>() }
}
impl<T: 'static + AnyPrivate> Any for T {}
///////////////////////////////////////////////////////////////////////////////
// Extension methods for Any trait objects.
// Implemented as three extension traits so that the methods can be generic.

View File

@ -12,6 +12,4 @@ fn main() {
let _x = "test" as &::std::any::Any;
//~^ ERROR the trait `core::kinds::Sized` is not implemented for the type `str`
//~^^ NOTE the trait `core::kinds::Sized` must be implemented for the cast to the object type
//~^^^ ERROR the trait `core::kinds::Sized` is not implemented for the type `str`
//~^^^^ NOTE the trait `core::kinds::Sized` must be implemented for the cast to the object type
}