#[derive(Copy, Clone, Debug, Eq, PartialEq)] | |
pub struct Foo { | |
} | |
impl Foo { | |
fn get(&self) -> Option<&Result<String, String>> { | |
None | |
} | |
fn mutate(&mut self) { } | |
} | |
fn main() { | |
let mut foo = Foo { }; | |
// foo.get() returns type Option<&Result<String, String>>, so | |
// using `string` keeps borrow of `foo` alive. Hence calling | |
// `foo.mutate()` should be an error. | |
while let Some(Ok(string)) = foo.get() { | |
foo.mutate(); | |
//~^ ERROR cannot borrow `foo` as mutable | |
println!("foo={:?}", *string); | |
} | |
} |