Skip to content
Browse files

Document why Any is not an unsafe trait

  • Loading branch information
Mark-Simulacrum committed Dec 22, 2019
1 parent 3982d35 commit 687891309659fd2942f4c8bc8f9fd2feaf85d864
Showing with 10 additions and 0 deletions.
  1. +10 −0 src/libcore/
@@ -74,6 +74,16 @@ use crate::intrinsics;
/// See the [module-level documentation][mod] for more details.
/// [mod]: index.html
// This trait is not unsafe, though we rely on the specifics of it's sole impl's
// `type_id` function in unsafe code (e.g., `downcast`). Normally, that would be
// a problem, but because the only impl of `Any` is a blanket implementation, no
// other code can implement `Any`.
// We could plausibly make this trait unsafe -- it would not cause breakage,
// since we control all the implementations -- but we choose not to as that's
// both not really necessary and may confuse users about the distinction of
// unsafe traits and unsafe methods (i.e., `type_id` would still be safe to call,
// but we would likely want to indicate as such in documentation).
#[stable(feature = "rust1", since = "1.0.0")]
pub trait Any: 'static {
/// Gets the `TypeId` of `self`.

0 comments on commit 6878913

Please sign in to comment.
You can’t perform that action at this time.