E0803 - Error codes index
Description: Book listing all Rust error codes

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# Error code E0803

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:

    #![allow(unused)]
    fn main() {
    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:

    #![allow(unused)]
    fn main() {
    // 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
        }
    }
    }