]> git.lizzy.rs Git - rust.git/blob - src/test/ui/coercion/coerce-overloaded-autoderef.rs
Rollup merge of #103645 - weihanglo:update-cargo, r=weihanglo
[rust.git] / src / test / ui / coercion / coerce-overloaded-autoderef.rs
1 // run-pass
2 #![allow(unused_braces)]
3 #![allow(dead_code)]
4 // pretty-expanded FIXME #23616
5
6 use std::rc::Rc;
7
8 // Examples from the "deref coercions" RFC, at rust-lang/rfcs#241.
9
10 fn use_ref<T>(_: &T) {}
11 fn use_mut<T>(_: &mut T) {}
12
13 fn use_rc<T>(t: Rc<T>) {
14     use_ref(&*t);  // what you have to write today
15     use_ref(&t);   // what you'd be able to write
16     use_ref(&&&&&&t);
17     use_ref(&mut &&&&&t);
18     use_ref(&&&mut &&&t);
19 }
20
21 fn use_mut_box<T>(mut t: &mut Box<T>) {
22     use_mut(&mut *t); // what you have to write today
23     use_mut(t);       // what you'd be able to write
24     use_mut(&mut &mut &mut t);
25
26     use_ref(&*t);      // what you have to write today
27     use_ref(t);        // what you'd be able to write
28     use_ref(&&&&&&t);
29     use_ref(&mut &&&&&t);
30     use_ref(&&&mut &&&t);
31 }
32
33 fn use_nested<T>(t: &Box<T>) {
34     use_ref(&**t);  // what you have to write today
35     use_ref(t);     // what you'd be able to write (note: recursive deref)
36     use_ref(&&&&&&t);
37     use_ref(&mut &&&&&t);
38     use_ref(&&&mut &&&t);
39 }
40
41 fn use_slice(_: &[u8]) {}
42 fn use_slice_mut(_: &mut [u8]) {}
43
44 fn use_vec(mut v: Vec<u8>) {
45     use_slice_mut(&mut v[..]); // what you have to write today
46     use_slice_mut(&mut v);     // what you'd be able to write
47     use_slice_mut(&mut &mut &mut v);
48
49     use_slice(&v[..]);  // what you have to write today
50     use_slice(&v);      // what you'd be able to write
51     use_slice(&&&&&&v);
52     use_slice(&mut &&&&&v);
53     use_slice(&&&mut &&&v);
54 }
55
56 fn use_vec_ref(v: &Vec<u8>) {
57     use_slice(&v[..]);  // what you have to write today
58     use_slice(v);       // what you'd be able to write
59     use_slice(&&&&&&v);
60     use_slice(&mut &&&&&v);
61     use_slice(&&&mut &&&v);
62 }
63
64 fn use_op_rhs(s: &mut String) {
65     *s += {&String::from(" ")};
66 }
67
68 pub fn main() {}