diff options
| author | Richard S. Imaoka <richard.e.imaoka@gmail.com> | 2017-01-16 09:32:09 +0900 |
|---|---|---|
| committer | Richard S. Imaoka <richard.e.imaoka@gmail.com> | 2017-01-17 22:16:55 +0900 |
| commit | c525094badc72c50fb713922d4aa0d0513622ff2 (patch) | |
| tree | bbc61e9599b2a014b93f29fba387583dc6a8990c | |
| parent | 0ef85a6b1c06839197c26a895cb6d8ce36915800 (diff) | |
| download | rust-c525094badc72c50fb713922d4aa0d0513622ff2.tar.gz rust-c525094badc72c50fb713922d4aa0d0513622ff2.zip | |
Add error explanation for E0491
| -rw-r--r-- | src/librustc/diagnostics.rs | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs index 1655c716b6b..5505276d451 100644 --- a/src/librustc/diagnostics.rs +++ b/src/librustc/diagnostics.rs @@ -1454,6 +1454,40 @@ struct Prince<'kiss, 'SnowWhite: 'kiss> { // You say here that 'kiss must live ``` "##, +E0491: r##" +A reference has a longer lifetime than the data it references. + +Erroneous code example: + +```compile_fail,E0491 +// struct containing a reference requires a lifetime parameter, +// because the data the reference points to must outlive the struct (see E0106) +struct Struct<'a> { + ref_i32: &'a i32, +} + +// However, a nested struct like this, the signature itself does not tell +// whether 'a outlives 'b or the other way around. +// So it could be possible that 'b of reference outlives 'a of the data. +struct Nested<'a, 'b> { + ref_struct: &'b Struct<'a>, // compile error E0491 +} +``` + +To fix this issue, you can specify a bound to the lifetime like below: + +``` +struct Struct<'a> { + ref_i32: &'a i32, +} + +// 'a: 'b means 'a outlives 'b +struct Nested<'a: 'b, 'b> { + ref_struct: &'b Struct<'a>, +} +``` +"##, + E0496: r##" A lifetime name is shadowing another lifetime name. Erroneous code example: @@ -1698,7 +1732,6 @@ register_diagnostics! { E0488, // lifetime of variable does not enclose its declaration E0489, // type/lifetime parameter not in scope here E0490, // a value of type `..` is borrowed for too long - E0491, // in type `..`, reference has a longer lifetime than the data it... E0495, // cannot infer an appropriate lifetime due to conflicting requirements E0566 // conflicting representation hints } |
