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

A mutable reference was used in a constant.

Erroneous code example:

    fn main() {
        const OH_NO: &'static mut usize = &mut 1; // error!
    }

Mutable references (`&mut`) can only be used in constant functions, not statics or constants. This limitation exists to prevent the creation of constants that have a mutable reference in their final value. If you had a constant of `&mut i32` type, you could modify the value through that reference, making the constant essentially mutable.

While there could be a more fine-grained scheme in the future that allows mutable references if they are not "leaked" to the final value, a more conservative approach was chosen for now. `const fn` do not have this problem, as the borrow checker will prevent the `const fn` from returning new mutable references.

Remember: you cannot use a function call inside a constant or static. However, you can totally use it in constant functions:

    const fn foo(x: usize) -> usize {
        let mut y = 1;
        let z = &mut y;
        *z += x;
        y
    }

    fn main() {
        const FOO: usize = foo(10); // ok!
    }