fix: Alloc new errorcode E0803 for E0495
Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
This commit is contained in:
46
compiler/rustc_error_codes/src/error_codes/E0803.md
Normal file
46
compiler/rustc_error_codes/src/error_codes/E0803.md
Normal file
@@ -0,0 +1,46 @@
|
||||
A trait implementation returns a reference without an
|
||||
explicit lifetime linking it to `self`.
|
||||
It commonly arises in generic trait implementations
|
||||
requiring explicit lifetime bounds.
|
||||
|
||||
Erroneous code example:
|
||||
|
||||
```compile_fail,E0803
|
||||
trait DataAccess<T> {
|
||||
fn get_ref(&self) -> T;
|
||||
}
|
||||
|
||||
struct Container<'a> {
|
||||
value: &'a f64,
|
||||
}
|
||||
|
||||
// Attempting to implement reference return
|
||||
impl<'a> DataAccess<&f64> for Container<'a> {
|
||||
fn get_ref(&self) -> &f64 { // Error: Lifetime mismatch
|
||||
self.value
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The trait method returns &f64 requiring an independent lifetime
|
||||
The struct Container<'a> carries lifetime parameter 'a
|
||||
The compiler cannot verify if the returned reference satisfies 'a constraints
|
||||
Solution
|
||||
Explicitly bind lifetimes to clarify constraints:
|
||||
```
|
||||
// Modified trait with explicit lifetime binding
|
||||
trait DataAccess<'a, T> {
|
||||
fn get_ref(&'a self) -> T;
|
||||
}
|
||||
|
||||
struct Container<'a> {
|
||||
value: &'a f64,
|
||||
}
|
||||
|
||||
// Correct implementation (bound lifetimes)
|
||||
impl<'a> DataAccess<'a, &'a f64> for Container<'a> {
|
||||
fn get_ref(&'a self) -> &'a f64 {
|
||||
self.value
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user