-
-
Notifications
You must be signed in to change notification settings - Fork 14.2k
Closed
Description
Consider this snippet of code:
fn main() {
let a: &mut i32 = &mut 0;
{ let b = a; }
let c = a;
}It properly fails to compile, as a is moved into b.
However this one compiles fine:
fn main() {
let a: &mut i32 = &mut 0;
{ let b: &mut i32 = a; }
let c = a;
}Adding a type annotation to b implicitly changed the move of a into a re-borrow. This behavior actually makes sense: if b was annotated &i32, a move would have not been possible, and a re-borrow would have been mandatory.
It is pretty harmless and does not pose any safety issue (actually I think having a "always re-borrow" policy would still be safe), but is still an implicit behavior that is not documented (at least I didn't find any documentation about it).
(Comes from a SO question: http://stackoverflow.com/q/30535529/2536143 )
Metadata
Metadata
Assignees
Labels
No labels