]>
Commit | Line | Data |
---|---|---|
f035d41b XL |
1 | // run-pass |
2 | #![allow(unused_braces)] | |
3 | #![allow(dead_code)] | |
4 | // pretty-expanded FIXME #23616 | |
85aaf69f | 5 | |
f035d41b | 6 | use std::rc::Rc; |
85aaf69f | 7 | |
f035d41b XL |
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); | |
85aaf69f SL |
31 | } |
32 | ||
f035d41b XL |
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); | |
85aaf69f SL |
54 | } |
55 | ||
f035d41b XL |
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); | |
85aaf69f SL |
62 | } |
63 | ||
f035d41b XL |
64 | fn use_op_rhs(s: &mut String) { |
65 | *s += {&String::from(" ")}; | |
85aaf69f SL |
66 | } |
67 | ||
68 | pub fn main() {} |