Skip to content

Commit

Permalink
Add details on PhantomData
Browse files Browse the repository at this point in the history
  • Loading branch information
AlisdairO committed Jul 18, 2015
1 parent ea79264 commit f78333e
Showing 1 changed file with 35 additions and 10 deletions.
45 changes: 35 additions & 10 deletions src/librustc_typeck/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2112,38 +2112,63 @@ For more information see the [opt-in builtin traits RFC](https://github.com/rust
"##,

E0392: r##"
This error indicates that a type parameter has been declared but not actually
used.
Here is an example that demonstrates the error:
This error indicates that a type or lifetime parameter has been declared
but not actually used. Here is an example that demonstrates the error:
```
enum Foo<T> {
Bar
}
```
The first way to fix this error is by removing the type parameter, as
shown below:
If the type parameter was included by mistake, this error can be fixed
by simply removing the type parameter, as shown below:
```
enum Foo {
Bar
}
```
The second method is to actually make use of the type parameter:
Alternatively, if the type parameter was intentionally inserted, it must be
used. A simple fix is shown below:
```
enum Foo<T> {
Bar(T)
}
```
See the 'Type Parameters' section of the reference for more details
on this topic:
This error may also commonly be found when working with unsafe code. For
example, when using raw pointers one may wish to specify the lifetime for
which the pointed-at data is valid. An initial attempt (below) causes this
error:
```
struct Foo<'a, T> {
x: *const T
}
```
We want to express the constraint that Foo should not outlive `'a`, because
the data pointed to by `T` is only valid for that lifetime. The problem is
that there are no actual uses of `'a`. It's possible to work around this
by adding a PhantomData type to the struct, using it to tell the compiler
to act as if the struct contained a borrowed reference `&'a T`:
```
use std::marker::PhantomData;
struct Foo<'a, T: 'a> {
x: *const T,
phantom: PhantomData<&'a T>
}
```
PhantomData can also be used to express information about unused type parameters.
You can read more about it in the API documentation:
http://doc.rust-lang.org/reference.html#type-parameters-1
https://doc.rust-lang.org/std/marker/struct.PhantomData.html
"##

}
Expand Down

0 comments on commit f78333e

Please sign in to comment.