pub(crate) struct NormalizesToTermHack<'db> {
term: Term<'db>,
unconstrained_term: Term<'db>,
}Expand description
The expected term of a NormalizesTo goal gets replaced
with an unconstrained inference variable when computing
NormalizesTo goals and we return the nested goals to the
caller, who also equates the actual term with the expected.
This is an implementation detail of the trait solver and
not something we want to leak to users. We therefore
treat NormalizesTo goals as if they apply the expected
type at the end of each candidate.
Fields§
§term: Term<'db>§unconstrained_term: Term<'db>Implementations§
Source§impl<'db> NormalizesToTermHack<'db>
impl<'db> NormalizesToTermHack<'db>
Sourcefn constrain_and(
&self,
infcx: &InferCtxt<'db>,
param_env: ParamEnv<'db>,
f: impl FnOnce(&mut ObligationCtxt<'_, 'db>),
) -> Result<Certainty, NoSolution>
fn constrain_and( &self, infcx: &InferCtxt<'db>, param_env: ParamEnv<'db>, f: impl FnOnce(&mut ObligationCtxt<'_, 'db>), ) -> Result<Certainty, NoSolution>
Relate the term with the new unconstrained_term created
when computing the proof tree for this NormalizesTo goals.
This handles nested obligations.
Trait Implementations§
Source§impl<'db> Clone for NormalizesToTermHack<'db>
impl<'db> Clone for NormalizesToTermHack<'db>
Source§fn clone(&self) -> NormalizesToTermHack<'db>
fn clone(&self) -> NormalizesToTermHack<'db>
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<'db> Debug for NormalizesToTermHack<'db>
impl<'db> Debug for NormalizesToTermHack<'db>
impl<'db> Copy for NormalizesToTermHack<'db>
Auto Trait Implementations§
impl<'db> Freeze for NormalizesToTermHack<'db>
impl<'db> RefUnwindSafe for NormalizesToTermHack<'db>
impl<'db> Send for NormalizesToTermHack<'db>
impl<'db> Sync for NormalizesToTermHack<'db>
impl<'db> Unpin for NormalizesToTermHack<'db>
impl<'db> UnsafeUnpin for NormalizesToTermHack<'db>
impl<'db> UnwindSafe for NormalizesToTermHack<'db>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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