diff options
| author | bors <bors@rust-lang.org> | 2015-07-19 09:01:20 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-07-19 09:01:20 +0000 |
| commit | 266428845d02252815e16ccfe48b5ba2f808faca (patch) | |
| tree | b5aa8e583133c5e06de1ad7ea228969c0621716c /src | |
| parent | 6b10efcc8b2cf9813efca5c0be3aaebf848fb82f (diff) | |
| parent | 91f0301aa521e057ab180d8d0c6b2ca98796f095 (diff) | |
| download | rust-266428845d02252815e16ccfe48b5ba2f808faca.tar.gz rust-266428845d02252815e16ccfe48b5ba2f808faca.zip | |
Auto merge of #27099 - AlisdairO:diagnostics3, r=Manishearth
Per the title. I've linked to the reference at http://doc.rust-lang.org/reference.html#type-parameters-1, but I'm not sure that's such a good link - but there doesn't seem to be a great deal of explanation elsewhere in the reference either...
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_typeck/diagnostics.rs | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/src/librustc_typeck/diagnostics.rs b/src/librustc_typeck/diagnostics.rs index ed04fde463c..a002ed311e8 100644 --- a/src/librustc_typeck/diagnostics.rs +++ b/src/librustc_typeck/diagnostics.rs @@ -2109,6 +2109,66 @@ E0380: r##" Default impls are only allowed for traits with no methods or associated items. For more information see the [opt-in builtin traits RFC](https://github.com/rust -lang/rfcs/blob/master/text/0019-opt-in-builtin-traits.md). +"##, + +E0392: r##" +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 +} +``` + +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 +} +``` + +Alternatively, if the type parameter was intentionally inserted, it must be +used. A simple fix is shown below: + +``` +enum Foo<T> { + Bar(T) +} +``` + +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: + +https://doc.rust-lang.org/std/marker/struct.PhantomData.html "## } @@ -2211,7 +2271,6 @@ register_diagnostics! { E0390, // only a single inherent implementation marked with // `#[lang = \"{}\"]` is allowed for the `{}` primitive E0391, // unsupported cyclic reference between types/traits detected - E0392, // parameter `{}` is never used E0393, // the type parameter `{}` must be explicitly specified in an object // type because its default value `{}` references the type `Self`" E0399, // trait items need to be implemented because the associated |
