enum InheritedRefMatchRule {
EatOuter,
EatInner,
EatBoth {
consider_inherited_ref: bool,
},
}
Expand description
Variations on RFC 3627’s Rule 4: when do reference patterns match against inherited references?
“Inherited reference” designates the &
/&mut
types that arise from using match ergonomics, i.e.
from matching a reference type with a non-reference pattern. E.g. when Some(x)
matches on
&mut Option<&T>
, x
gets type &mut &T
and the outer &mut
is considered “inherited”.
Variants§
EatOuter
Reference patterns consume only the inherited reference if possible, regardless of whether the underlying type being matched against is a reference type. If there is no inherited reference, a reference will be consumed from the underlying type.
EatInner
Reference patterns consume only a reference from the underlying type if possible. If the underlying type is not a reference type, the inherited reference will be consumed.
EatBoth
When the underlying type is a reference type, reference patterns consume both layers of reference, i.e. they both reset the binding mode and consume the reference type.
Fields
consider_inherited_ref: bool
If true
, an inherited reference will be considered when determining whether a reference
pattern matches a given type:
- If the underlying type is not a reference, a reference pattern may eat the inherited reference;
- If the underlying type is a reference, a reference pattern matches if it can eat either one
of the underlying and inherited references. E.g. a
&mut
pattern is allowed if either the underlying type is&mut
or the inherited reference is&mut
. Iffalse
, a reference pattern is only matched against the underlying type. This isfalse
for stable Rust andtrue
for both theref_pat_eat_one_layer_2024
andref_pat_eat_one_layer_2024_structural
feature gates.
Trait Implementations§
Source§impl Clone for InheritedRefMatchRule
impl Clone for InheritedRefMatchRule
Source§fn clone(&self) -> InheritedRefMatchRule
fn clone(&self) -> InheritedRefMatchRule
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for InheritedRefMatchRule
impl Debug for InheritedRefMatchRule
Source§impl PartialEq for InheritedRefMatchRule
impl PartialEq for InheritedRefMatchRule
impl Copy for InheritedRefMatchRule
impl Eq for InheritedRefMatchRule
impl StructuralPartialEq for InheritedRefMatchRule
Auto Trait Implementations§
impl DynSend for InheritedRefMatchRule
impl DynSync for InheritedRefMatchRule
impl Freeze for InheritedRefMatchRule
impl RefUnwindSafe for InheritedRefMatchRule
impl Send for InheritedRefMatchRule
impl Sync for InheritedRefMatchRule
impl Unpin for InheritedRefMatchRule
impl UnwindSafe for InheritedRefMatchRule
Blanket Implementations§
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 1 byte
Size for each variant:
EatOuter
: 0 bytesEatInner
: 0 bytesEatBoth
: 1 byte