diff options
| author | Jorge Aparicio <japaricious@gmail.com> | 2015-01-19 15:16:48 -0500 |
|---|---|---|
| committer | Jorge Aparicio <japaricious@gmail.com> | 2015-01-19 15:29:27 -0500 |
| commit | a09df2cb9d1e6025a9565f3ef7983cb743b421a3 (patch) | |
| tree | 0a5cab1f52175a81851a49ac10996b77f18cfa29 /src | |
| parent | 54c9a4655b8c662b5ce3a7ad8a47a4d4d12e78b7 (diff) | |
| download | rust-a09df2cb9d1e6025a9565f3ef7983cb743b421a3.tar.gz rust-a09df2cb9d1e6025a9565f3ef7983cb743b421a3.zip | |
impl Hash for arrays
closes #21402 cc #15294
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcore/array.rs | 7 | ||||
| -rw-r--r-- | src/test/run-pass/issue-21402.rs | 18 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/libcore/array.rs b/src/libcore/array.rs index c07fac108d6..0cc31bf70de 100644 --- a/src/libcore/array.rs +++ b/src/libcore/array.rs @@ -17,6 +17,7 @@ use clone::Clone; use cmp::{PartialEq, Eq, PartialOrd, Ord, Ordering}; use fmt; +use hash::{Hash, Hasher, self}; use marker::Copy; use ops::{Deref, FullRange}; use option::Option; @@ -32,6 +33,12 @@ macro_rules! array_impls { } } + impl<S: hash::Writer + Hasher, T: Hash<S>> Hash<S> for [T; $N] { + fn hash(&self, state: &mut S) { + Hash::hash(&self[], state) + } + } + #[unstable = "waiting for Show to stabilize"] impl<T:fmt::Show> fmt::Show for [T; $N] { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { diff --git a/src/test/run-pass/issue-21402.rs b/src/test/run-pass/issue-21402.rs new file mode 100644 index 00000000000..6be7cea2928 --- /dev/null +++ b/src/test/run-pass/issue-21402.rs @@ -0,0 +1,18 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[derive(Hash)] +struct Foo { + a: Vec<bool>, + b: (bool, bool), + c: [bool; 2], +} + +fn main() {} |
