pub(crate) enum TreatNotYetDefinedOpaques {
AsInfer,
AsRigid,
}Expand description
Used by FnCtxt::lookup_method_for_operator with -Znext-solver.
With AsRigid we error on impl Opaque: NotInItemBounds while
AsInfer just treats it as ambiguous and succeeds. This is necessary
as we want FnCtxt::check_expr_call to treat not-yet-defined opaque
types as rigid to support impl Deref<Target = impl FnOnce()> and
Box<impl FnOnce()>.
We only want to treat opaque types as rigid if we need to eagerly choose between multiple candidates. We otherwise treat them as ordinary inference variable to avoid rejecting otherwise correct code.
Variants§
Trait Implementations§
Auto Trait Implementations§
impl Freeze for TreatNotYetDefinedOpaques
impl RefUnwindSafe for TreatNotYetDefinedOpaques
impl Send for TreatNotYetDefinedOpaques
impl Sync for TreatNotYetDefinedOpaques
impl Unpin for TreatNotYetDefinedOpaques
impl UnsafeUnpin for TreatNotYetDefinedOpaques
impl UnwindSafe for TreatNotYetDefinedOpaques
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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> ⓘ
Converts
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> ⓘ
Converts
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 more