| // Issue #62007: assigning over a const-index projection of an array |
| // (in this case, `list[I] = n;`) should in theory be able to kill all borrows |
| // of `list[0]`, so that `list[0]` could be borrowed on the next |
| // iteration through the loop. |
| // |
| // Currently the compiler does not allow this. We may want to consider |
| // loosening that restriction in the future. (However, doing so would |
| // at *least* require T-lang team approval, and probably an RFC; e.g. |
| // such loosening might make complicate the user's mental mode; it |
| // also would make code more brittle in the face of refactorings that |
| // replace constants with variables. |
| |
| #![allow(dead_code)] |
| |
| struct List<T> { |
| value: T, |
| next: Option<Box<List<T>>>, |
| } |
| |
| fn to_refs<T>(mut list: [&mut List<T>; 2]) -> Vec<&mut T> { |
| let mut result = vec![]; |
| loop { |
| result.push(&mut list[0].value); //~ ERROR cannot borrow `list[_].value` as mutable |
| if let Some(n) = list[0].next.as_mut() { //~ ERROR cannot borrow `list[_].next` as mutable |
| list[0] = n; |
| } else { |
| return result; |
| } |
| } |
| } |
| |
| fn main() {} |