-
Notifications
You must be signed in to change notification settings - Fork 29
Open
Description
I wish to move out of the CheeseVec
, which seems impossible because CheeseVec
implements Drop
:
use soa_derive::StructOfArray;
#[derive(StructOfArray)]
pub struct Cheese {
pub smell: f64,
}
fn main() {
let cheese0 = Cheese { smell: 10.0 };
let cheese1 = Cheese { smell: -1000.0 };
let mut cheeses = CheeseVec::with_capacity(2);
cheeses.push(cheese0);
cheeses.push(cheese1);
let smell_vec: Vec<f64> = unpack_cheeses(cheeses);
}
fn unpack_cheeses(cheeses: CheeseVec) -> Vec<f64> {
let CheeseVec { smell } = cheeses;
smell
}
1 error[E0509]: cannot move out of type `CheeseVec`, which implements the `Drop` trait
--> src/main.rs:18:31
|
18 | let CheeseVec { smell } = cheeses;
| ----- ^^^^^^^ cannot move out of here
| |
| data moved here
| move occurs because `smell` has type `Vec<f64>`, which does not implement the `Copy` trait
|
help: consider borrowing the pattern binding
|
18 | let CheeseVec { ref smell } = cheeses;
| +++
For more information about this error, try `rustc --explain E0509`.
Is there any way to take ownership of the fields of a CheeseVec
? Is this a feature that soa_derive
could implement? Is there any workaround for the above error?
schneiderfelipeschneiderfelipe
Metadata
Metadata
Assignees
Labels
No labels