1 #![feature(tool_lints)]
3 #![warn(clippy::clone_on_ref_ptr)]
6 use std::collections::HashSet;
7 use std::collections::VecDeque;
8 use std::rc::{self, Rc};
9 use std::sync::{self, Arc};
13 impl SomeTrait for SomeImpl {}
20 vec![1].clone(); // ok, not a Copy type
21 Some(vec![1]).clone(); // ok, not a Copy type
25 fn clone_on_ref_ptr() {
26 let rc = Rc::new(true);
27 let arc = Arc::new(true);
29 let rcweak = Rc::downgrade(&rc);
30 let arc_weak = Arc::downgrade(&arc);
39 rc::Weak::clone(&rcweak);
42 sync::Weak::clone(&arc_weak);
44 let x = Arc::new(SomeImpl);
45 let _: Arc<SomeTrait> = x.clone();
48 fn clone_on_copy_generic<T: Copy>(t: T) {
54 fn clone_on_double_ref() {
57 let z: &Vec<_> = y.clone();
59 println!("{:p} {:p}",*y, z);
62 fn iter_clone_collect() {
64 let v2 : Vec<isize> = v.iter().cloned().collect();
65 let v3 : HashSet<isize> = v.iter().cloned().collect();
66 let v4 : VecDeque<isize> = v.iter().cloned().collect();