enum Coin {
Penny,
Nickel,
Dime,
Quarter(UsState),
}
enum UsState {
Alabama,
Alaska,
Oklahoma,
}
fn main() {
let quarter: Coin = Coin::Quarter(UsState::Alabama);
println!("A Quarter is {} cents.", value_in_cents(quarter));
println!("{:?}", quarter);
}
fn value_in_cents(coin: Coin) -> u8 {
// do some stuff and return u8
}
Compiler output:
error[E0382]: borrow of moved value: `quarter`
--> src/main.rs:38:22
|
35 | let quarter: Coin = Coin::Quarter(UsState::Alabama);
| ------- move occurs because `quarter` has type `Coin`, which does not implement the `Copy` trait
36 | println!("A Quarter is {} cents.", value_in_cents(quarter));
| ------- value moved here
37 |
38 | println!("{:?}", quarter);
| ^^^^^^^ value borrowed here after move
From my point of view, the Enum Coin
has a fixed size and is known at compile time, so it should be stored at stack, so it doesn't need to care about ownership.
But why it still "moves"?