In the code below I get an error saying that an immutable borrow occurred in the println!. But as you can see I'm not passing by reference, which would be &x. So my questions are:
Why does Rust do not enforce that you pass by reference explicitly?
Is there such a thing as pass by copy for primitives?
Any access to x is invalid while it is mutably borrowed (because mutable borrowing is exclusive). So copy, move or borrow of x in that location would all error, because y is still in scope.