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

# 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.