about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorJorge Aparicio <japaricious@gmail.com>2015-01-19 15:16:48 -0500
committerJorge Aparicio <japaricious@gmail.com>2015-01-19 15:29:27 -0500
commita09df2cb9d1e6025a9565f3ef7983cb743b421a3 (patch)
tree0a5cab1f52175a81851a49ac10996b77f18cfa29 /src
parent54c9a4655b8c662b5ce3a7ad8a47a4d4d12e78b7 (diff)
downloadrust-a09df2cb9d1e6025a9565f3ef7983cb743b421a3.tar.gz
rust-a09df2cb9d1e6025a9565f3ef7983cb743b421a3.zip
impl Hash for arrays
closes #21402
cc #15294
Diffstat (limited to 'src')
-rw-r--r--src/libcore/array.rs7
-rw-r--r--src/test/run-pass/issue-21402.rs18
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() {}