#### Note: this error code is no longer emitted by the compiler. An attempt was made to mutate data using a non-mutable reference. This commonly occurs when attempting to assign to a non-mutable reference of a mutable reference (`&(&mut T)`). Erroneous code example: ```compile_fail struct FancyNum { num: u8, } fn main() { let mut fancy = FancyNum{ num: 5 }; let fancy_ref = &(&mut fancy); fancy_ref.num = 6; // error: cannot assign to data in a `&` reference println!("{}", fancy_ref.num); } ``` Here, `&mut fancy` is mutable, but `&(&mut fancy)` is not. Creating an immutable reference to a value borrows it immutably. There can be multiple references of type `&(&mut T)` that point to the same value, so they must be immutable to prevent multiple mutable references to the same value. To fix this, either remove the outer reference: ``` struct FancyNum { num: u8, } fn main() { let mut fancy = FancyNum{ num: 5 }; let fancy_ref = &mut fancy; // `fancy_ref` is now &mut FancyNum, rather than &(&mut FancyNum) fancy_ref.num = 6; // No error! println!("{}", fancy_ref.num); } ``` Or make the outer reference mutable: ``` struct FancyNum { num: u8 } fn main() { let mut fancy = FancyNum{ num: 5 }; let fancy_ref = &mut (&mut fancy); // `fancy_ref` is now &mut(&mut FancyNum), rather than &(&mut FancyNum) fancy_ref.num = 6; // No error! println!("{}", fancy_ref.num); } ```