16
16
use std:: cell:: { UnsafeCell } ;
17
17
use std:: ops:: { Placer , PlacementAgent } ;
18
18
19
- struct EmplaceBack < ' a , T : ' a > {
19
+ struct EmplaceBackPlacer < ' a , T : ' a > {
20
20
vec : & ' a mut Vec < T > ,
21
21
}
22
22
23
+ trait EmplaceBack < ' a , T > {
24
+ fn emplace_back ( & ' a mut self ) -> EmplaceBackPlacer < ' a , T > ;
25
+ }
26
+
27
+ impl < ' a , T : ' a > EmplaceBack < ' a , T > for Vec < T > {
28
+ fn emplace_back ( & ' a mut self ) -> EmplaceBackPlacer < ' a , T > {
29
+ EmplaceBackPlacer { vec : self }
30
+ }
31
+ }
32
+
23
33
pub fn main ( ) {
24
34
let mut v : Vec < [ f32 , ..4 ] > = vec ! [ ] ;
25
35
v. push ( [ 10. , 20. , 30. , 40. ] ) ;
26
36
v. push ( [ 11. , 21. , 31. , 41. ] ) ;
27
- let mut pv = EmplaceBack { vec : & mut v } ;
28
- let ( ) = box ( pv) [ 12. , 22 . , 32 . , 42 . ] ;
29
- let v = pv. vec ;
37
+ let ( ) = // (Explicitly showing `box` returns `()` here.)
38
+ box ( v. emplace_back ( ) ) [ 12. , 22 . , 32 . , 42 . ] ;
30
39
assert ! ( same_contents(
31
40
v. as_slice( ) ,
32
41
[ [ 10. , 20. , 30. , 40. ] ,
@@ -51,7 +60,7 @@ struct EmplaceBackAgent<T> {
51
60
offset : uint ,
52
61
}
53
62
54
- impl < ' a , T > Placer < T , ( ) , EmplaceBackAgent < T > > for EmplaceBack < ' a , T > {
63
+ impl < ' a , T > Placer < T , ( ) , EmplaceBackAgent < T > > for EmplaceBackPlacer < ' a , T > {
55
64
fn make_place ( & self ) -> EmplaceBackAgent < T > {
56
65
let len = self . vec . len ( ) ;
57
66
let v = self . vec as * mut Vec < T > ;
0 commit comments