Auto merge of #84147 - cuviper:array-method-dispatch, r=nikomatsakis,m-ou-se
Cautiously add IntoIterator for arrays by value Add the attribute described in #84133, `#[rustc_skip_array_during_method_dispatch]`, which effectively hides a trait from method dispatch when the receiver type is an array. Then cherry-pick `IntoIterator for [T; N]` from #65819 and gate it with that attribute. Arrays can now be used as `IntoIterator` normally, but `array.into_iter()` has edition-dependent behavior, returning `slice::Iter` for 2015 and 2018 editions, or `array::IntoIter` for 2021 and later. r? `@nikomatsakis` cc `@LukasKalbertodt` `@rust-lang/libs`
This commit is contained in:
commit
13a2615883
18 changed files with 237 additions and 171 deletions
|
@ -35,6 +35,11 @@ pub struct TraitDef {
|
|||
/// and thus `impl`s of it are allowed to overlap.
|
||||
pub is_marker: bool,
|
||||
|
||||
/// If `true`, then this trait has the `#[rustc_skip_array_during_method_dispatch]`
|
||||
/// attribute, indicating that editions before 2021 should not consider this trait
|
||||
/// during method dispatch if the receiver is an array.
|
||||
pub skip_array_during_method_dispatch: bool,
|
||||
|
||||
/// Used to determine whether the standard library is allowed to specialize
|
||||
/// on this trait.
|
||||
pub specialization_kind: TraitSpecializationKind,
|
||||
|
@ -82,6 +87,7 @@ impl<'tcx> TraitDef {
|
|||
paren_sugar: bool,
|
||||
has_auto_impl: bool,
|
||||
is_marker: bool,
|
||||
skip_array_during_method_dispatch: bool,
|
||||
specialization_kind: TraitSpecializationKind,
|
||||
def_path_hash: DefPathHash,
|
||||
) -> TraitDef {
|
||||
|
@ -91,6 +97,7 @@ impl<'tcx> TraitDef {
|
|||
paren_sugar,
|
||||
has_auto_impl,
|
||||
is_marker,
|
||||
skip_array_during_method_dispatch,
|
||||
specialization_kind,
|
||||
def_path_hash,
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue