E0503 - 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 E0503

A value was used after it was mutably borrowed.

Erroneous code example:

    fn main() {
        let mut value = 3;
        // Create a mutable borrow of `value`.
        let borrow = &mut value;
        let _sum = value + 1; // error: cannot use `value` because
                              //        it was mutably borrowed
        println!("{}", borrow);
    }

In this example, `value` is mutably borrowed by `borrow` and cannot be used to calculate `sum`. This is not possible because this would violate Rust’s mutability rules.

You can fix this error by finishing using the borrow before the next use of the value:

    fn main() {
        let mut value = 3;
        let borrow = &mut value;
        println!("{}", borrow);
        // The block has ended and with it the borrow.
        // You can now use `value` again.
        let _sum = value + 1;
    }

Or by cloning `value` before borrowing it:

    fn main() {
        let mut value = 3;
        // We clone `value`, creating a copy.
        let value_cloned = value.clone();
        // The mutable borrow is a reference to `value` and
        // not to `value_cloned`...
        let borrow = &mut value;
        // ... which means we can still use `value_cloned`,
        let _sum = value_cloned + 1;
        // even though the borrow only ends here.
        println!("{}", borrow);
    }

For more information on Rust’s ownership system, take a look at the References & Borrowing section of the Book.