@@ -27,7 +27,7 @@ use default::Default;
27
27
use fmt;
28
28
use hash:: { Hash , self } ;
29
29
use iter:: IntoIterator ;
30
- use marker:: { Copy , Sized , Unsize } ;
30
+ use marker:: { Sized , Unsize } ;
31
31
use option:: Option ;
32
32
use slice:: { Iter , IterMut , SliceExt } ;
33
33
@@ -94,13 +94,6 @@ macro_rules! array_impls {
94
94
}
95
95
}
96
96
97
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
98
- impl <T : Copy > Clone for [ T ; $N] {
99
- fn clone( & self ) -> [ T ; $N] {
100
- * self
101
- }
102
- }
103
-
104
97
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
105
98
impl <T : Hash > Hash for [ T ; $N] {
106
99
fn hash<H : hash:: Hasher >( & self , state: & mut H ) {
@@ -210,3 +203,31 @@ macro_rules! array_impl_default {
210
203
}
211
204
212
205
array_impl_default ! { 32 , T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T }
206
+
207
+ macro_rules! array_impl_clone {
208
+ { $n: expr, $t: ident $( $ts: ident) * } => {
209
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
210
+ impl <T : Clone > Clone for [ T ; $n] {
211
+ fn clone( & self ) -> [ T ; $n] {
212
+ let & [ ref $t, $( ref $ts) ,* ] = self ;
213
+ [ $t. clone( ) , $( $ts. clone( ) ) ,* ]
214
+ }
215
+ }
216
+ array_impl_clone!{ ( $n - 1 ) , $( $ts) * }
217
+ } ;
218
+ { $n: expr, } => {
219
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
220
+ impl <T : Clone > Clone for [ T ; 0 ] {
221
+ fn clone( & self ) -> [ T ; 0 ] {
222
+ [ ]
223
+ }
224
+ }
225
+ } ;
226
+ }
227
+
228
+ array_impl_clone ! { 32 ,
229
+ t00 t01 t02 t03 t04 t05 t06 t07 t08 t09
230
+ t10 t11 t12 t13 t14 t15 t16 t17 t18 t19
231
+ t20 t21 t22 t23 t24 t25 t26 t27 t28 t29
232
+ t30 t31
233
+ }
0 commit comments