2025-04-29 10:46:26 +00:00
|
|
|
//! This test checks that calling `.clone()` on a type that does
|
|
|
|
//! not implement the `Clone` trait results in a compilation error.
|
|
|
|
//! The `NotClone` and AlsoNotClone structs do not derive or
|
|
|
|
//! implement `Clone`, so attempting to clone them should fail.
|
2025-04-19 06:38:08 +00:00
|
|
|
|
2025-04-29 10:46:26 +00:00
|
|
|
struct NotClone {
|
|
|
|
i: isize,
|
2025-04-19 06:38:08 +00:00
|
|
|
}
|
|
|
|
|
2025-04-29 10:46:26 +00:00
|
|
|
fn not_clone(i: isize) -> NotClone {
|
|
|
|
NotClone { i }
|
|
|
|
}
|
|
|
|
|
|
|
|
struct AlsoNotClone {
|
|
|
|
i: isize,
|
|
|
|
j: NotClone,
|
|
|
|
}
|
|
|
|
|
|
|
|
fn also_not_clone(i: isize) -> AlsoNotClone {
|
|
|
|
AlsoNotClone {
|
|
|
|
i,
|
|
|
|
j: NotClone { i: i },
|
2025-04-19 06:38:08 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
2025-04-29 10:46:26 +00:00
|
|
|
let x = not_clone(10);
|
|
|
|
let _y = x.clone();
|
|
|
|
//~^ ERROR no method named `clone` found
|
|
|
|
|
|
|
|
let x = also_not_clone(10);
|
2025-04-19 06:38:08 +00:00
|
|
|
let _y = x.clone();
|
|
|
|
//~^ ERROR no method named `clone` found
|
|
|
|
}
|