Rollup merge of #102574 - aDotInTheVoid:const_collections_with_hasher, r=oli-obk,fee1-dead
Make Hash{Set,Map}::with_hasher unstably const Makes [`HashMap::with_hasher`](https://doc.rust-lang.org/stable/std/collections/hash_map/struct.HashMap.html#method.with_hasher) and [`HashSet::with_hasher`](https://doc.rust-lang.org/stable/std/collections/hash_set/struct.HashSet.html#method.with_hasher) `const`. This allows ```rust static GlobalState: Mutex<HashMap<i32, i32, SomeHasher>> = Mutex::new(HashMap::with_hasher(SomeHasher::new())) ``` Tracking issue: #102575
This commit is contained in:
commit
4025e95113
@ -280,7 +280,8 @@ impl<K, V, S> HashMap<K, V, S> {
|
||||
/// ```
|
||||
#[inline]
|
||||
#[stable(feature = "hashmap_build_hasher", since = "1.7.0")]
|
||||
pub fn with_hasher(hash_builder: S) -> HashMap<K, V, S> {
|
||||
#[rustc_const_unstable(feature = "const_collections_with_hasher", issue = "102575")]
|
||||
pub const fn with_hasher(hash_builder: S) -> HashMap<K, V, S> {
|
||||
HashMap { base: base::HashMap::with_hasher(hash_builder) }
|
||||
}
|
||||
|
||||
|
@ -1115,3 +1115,9 @@ fn from_array() {
|
||||
// that's a problem!
|
||||
let _must_not_require_type_annotation = HashMap::from([(1, 2)]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn const_with_hasher() {
|
||||
const X: HashMap<(), (), ()> = HashMap::with_hasher(());
|
||||
assert_eq!(X.len(), 0);
|
||||
}
|
||||
|
@ -376,7 +376,8 @@ impl<T, S> HashSet<T, S> {
|
||||
/// ```
|
||||
#[inline]
|
||||
#[stable(feature = "hashmap_build_hasher", since = "1.7.0")]
|
||||
pub fn with_hasher(hasher: S) -> HashSet<T, S> {
|
||||
#[rustc_const_unstable(feature = "const_collections_with_hasher", issue = "102575")]
|
||||
pub const fn with_hasher(hasher: S) -> HashSet<T, S> {
|
||||
HashSet { base: base::HashSet::with_hasher(hasher) }
|
||||
}
|
||||
|
||||
|
@ -496,3 +496,9 @@ fn from_array() {
|
||||
// that's a problem!
|
||||
let _must_not_require_type_annotation = HashSet::from([1, 2]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn const_with_hasher() {
|
||||
const X: HashSet<(), ()> = HashSet::with_hasher(());
|
||||
assert_eq!(X.len(), 0);
|
||||
}
|
||||
|
@ -351,6 +351,7 @@
|
||||
// Only used in tests/benchmarks:
|
||||
//
|
||||
// Only for const-ness:
|
||||
#![feature(const_collections_with_hasher)]
|
||||
#![feature(const_io_structs)]
|
||||
#![feature(const_ip)]
|
||||
#![feature(const_ipv4)]
|
||||
|
Loading…
x
Reference in New Issue
Block a user