Require Pointee::Metadata to be Freeze
So pointee metadata can be used in anonymous statics. This is prerequisite for implementing ThinBox without allocation for ZST. See https://github.com/rust-lang/rust/pull/123184#discussion_r1544627488
This commit is contained in:
parent
1aedc9640c
commit
8f5a28e0aa
3 changed files with 5 additions and 2 deletions
|
@ -2,6 +2,7 @@
|
|||
|
||||
use crate::fmt;
|
||||
use crate::hash::{Hash, Hasher};
|
||||
use crate::marker::Freeze;
|
||||
|
||||
/// Provides the pointer metadata type of any pointed-to type.
|
||||
///
|
||||
|
@ -57,7 +58,7 @@ pub trait Pointee {
|
|||
// NOTE: Keep trait bounds in `static_assert_expected_bounds_for_metadata`
|
||||
// in `library/core/src/ptr/metadata.rs`
|
||||
// in sync with those here:
|
||||
type Metadata: fmt::Debug + Copy + Send + Sync + Ord + Hash + Unpin;
|
||||
type Metadata: fmt::Debug + Copy + Send + Sync + Ord + Hash + Unpin + Freeze;
|
||||
}
|
||||
|
||||
/// Pointers to types implementing this trait alias are “thin”.
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#![feature(duration_constructors)]
|
||||
#![feature(exact_size_is_empty)]
|
||||
#![feature(extern_types)]
|
||||
#![feature(freeze)]
|
||||
#![feature(flt2dec)]
|
||||
#![feature(fmt_internals)]
|
||||
#![feature(float_minimum_maximum)]
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
use core::cell::RefCell;
|
||||
use core::marker::Freeze;
|
||||
use core::mem::{self, MaybeUninit};
|
||||
use core::num::NonZero;
|
||||
use core::ptr;
|
||||
|
@ -841,7 +842,7 @@ fn ptr_metadata_bounds() {
|
|||
fn static_assert_expected_bounds_for_metadata<Meta>()
|
||||
where
|
||||
// Keep this in sync with the associated type in `library/core/src/ptr/metadata.rs`
|
||||
Meta: Debug + Copy + Send + Sync + Ord + std::hash::Hash + Unpin,
|
||||
Meta: Debug + Copy + Send + Sync + Ord + std::hash::Hash + Unpin + Freeze,
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue