about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSteve Klabnik <steve@steveklabnik.com>2015-03-31 20:18:32 -0400
committerSteve Klabnik <steve@steveklabnik.com>2015-03-31 20:18:32 -0400
commitbfc2f5de85c86b7d60a26d16b9991d9763b4c07e (patch)
tree5a1084af717de170724c8c5997d63d19c6787833
parentd754722a04b99fdcae0fd97fa2a4395521145ef2 (diff)
downloadrust-bfc2f5de85c86b7d60a26d16b9991d9763b4c07e.tar.gz
rust-bfc2f5de85c86b7d60a26d16b9991d9763b4c07e.zip
Improvements to PhantomData<T>'s docs 👻
Fixes #22914
-rw-r--r--src/libcore/marker.rs18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/libcore/marker.rs b/src/libcore/marker.rs
index 3f4b39da4b3..a07b37a8026 100644
--- a/src/libcore/marker.rs
+++ b/src/libcore/marker.rs
@@ -346,17 +346,16 @@ impl<T:?Sized> MarkerTrait for T { }
 #[stable(feature = "rust1", since = "1.0.0")]
 pub trait PhantomFn<A:?Sized,R:?Sized=()> { }
 
-/// `PhantomData` is a way to tell the compiler about fake fields.
-/// Phantom data is required whenever type parameters are not used.
-/// The idea is that if the compiler encounters a `PhantomData<T>`
-/// instance, it will behave *as if* an instance of the type `T` were
-/// present for the purpose of various automatic analyses.
+/// `PhantomData<T>` allows you to describe that a type acts as if it stores a value of type `T`,
+/// even though it does not. This allows you to inform the compiler about certain safety properties
+/// of your code.
+///
+/// Though they both have scary names, `PhantomData<T>` and "phantom types" are unrelated. 👻👻👻
 ///
 /// # Examples
 ///
 /// When handling external resources over a foreign function interface, `PhantomData<T>` can
-/// prevent mismatches by enforcing types in the method implementations, although the struct
-/// doesn't actually contain values of the resource type.
+/// prevent mismatches by enforcing types in the method implementations:
 ///
 /// ```
 /// # trait ResType { fn foo(&self); };
@@ -397,11 +396,6 @@ pub trait PhantomFn<A:?Sized,R:?Sized=()> { }
 /// commonly necessary if the structure is using an unsafe pointer
 /// like `*mut T` whose referent may be dropped when the type is
 /// dropped, as a `*mut T` is otherwise not treated as owned.
-///
-/// FIXME. Better documentation and examples of common patterns needed
-/// here! For now, please see [RFC 738][738] for more information.
-///
-/// [738]: https://github.com/rust-lang/rfcs/blob/master/text/0738-variance.md
 #[lang="phantom_data"]
 #[stable(feature = "rust1", since = "1.0.0")]
 pub struct PhantomData<T:?Sized>;