diff options
| author | bors <bors@rust-lang.org> | 2015-08-15 04:19:14 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-08-15 04:19:14 +0000 |
| commit | 1e1b7f30228782ebf6168a5e20e63cdd7b9763ff (patch) | |
| tree | 11c7958f2edcd01e7eb8f2fad9c73ea2ac12d365 | |
| parent | ec8f072c1844eda577f64a83e5ecd54b549b78b4 (diff) | |
| parent | 975a8ed312bbe262171b4c950c52cf992293bd55 (diff) | |
| download | rust-1e1b7f30228782ebf6168a5e20e63cdd7b9763ff.tar.gz rust-1e1b7f30228782ebf6168a5e20e63cdd7b9763ff.zip | |
Auto merge of #27825 - withoutboats:default_array, r=alexcrichton
Implemented Default for arrays up to length 32 where T: Default using an additional macro.
| -rw-r--r-- | src/libcore/array.rs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/libcore/array.rs b/src/libcore/array.rs index cfe22b89178..d8b363b8cf7 100644 --- a/src/libcore/array.rs +++ b/src/libcore/array.rs @@ -21,6 +21,7 @@ use clone::Clone; use cmp::{PartialEq, Eq, PartialOrd, Ord, Ordering}; use convert::{AsRef, AsMut}; +use default::Default; use fmt; use hash::{Hash, self}; use iter::IntoIterator; @@ -161,3 +162,26 @@ array_impls! { 20 21 22 23 24 25 26 27 28 29 30 31 32 } + +// The Default impls cannot be generated using the array_impls! macro because +// they require array literals. + +macro_rules! array_impl_default { + {$n:expr, $t:ident $($ts:ident)*} => { + #[stable(since = "1.4.0", feature = "array_default")] + impl<T> Default for [T; $n] where T: Default { + fn default() -> [T; $n] { + [$t::default(), $($ts::default()),*] + } + } + array_impl_default!{($n - 1), $($ts)*} + }; + {$n:expr,} => { + #[stable(since = "1.4.0", feature = "array_default")] + impl<T> Default for [T; $n] { + fn default() -> [T; $n] { [] } + } + }; +} + +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} |
