diff --git a/src/libcore/array.rs b/src/libcore/array.rs index c07fac108d6f3..0cc31bf70dee6 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> Hash for [T; $N] { + fn hash(&self, state: &mut S) { + Hash::hash(&self[], state) + } + } + #[unstable = "waiting for Show to stabilize"] impl 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 0000000000000..6be7cea29280d --- /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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[derive(Hash)] +struct Foo { + a: Vec, + b: (bool, bool), + c: [bool; 2], +} + +fn main() {}