rustc_middle::ty::relate::combine

Trait PredicateEmittingRelation

pub trait PredicateEmittingRelation<Infcx, I = I>: TypeRelation<I>
where Infcx: InferCtxtLike<Interner = I>, I: Interner,
{ // Required methods fn span(&self) -> <I as Interner>::Span; fn param_env(&self) -> <I as Interner>::ParamEnv; fn structurally_relate_aliases(&self) -> StructurallyRelateAliases; fn register_goals( &mut self, obligations: impl IntoIterator<Item = Goal<I, <I as Interner>::Predicate>>, ); fn register_predicates( &mut self, obligations: impl IntoIterator>, ) where <impl IntoIterator as IntoIterator>::Item: Upcast<I, <I as Interner>::Predicate>; fn register_alias_relate_predicate( &mut self, a: <I as Interner>::Ty, b: <I as Interner>::Ty, ); }

Required Methods§

fn span(&self) -> <I as Interner>::Span

fn param_env(&self) -> <I as Interner>::ParamEnv

fn structurally_relate_aliases(&self) -> StructurallyRelateAliases

Whether aliases should be related structurally. This is pretty much always No unless you’re equating in some specific locations of the new solver. See the comments in these use-cases for more details.

fn register_goals( &mut self, obligations: impl IntoIterator<Item = Goal<I, <I as Interner>::Predicate>>, )

Register obligations that must hold in order for this relation to hold

fn register_predicates( &mut self, obligations: impl IntoIterator>, )
where <impl IntoIterator as IntoIterator>::Item: Upcast<I, <I as Interner>::Predicate>,

Register predicates that must hold in order for this relation to hold. This uses the default param_env of the obligation.

fn register_alias_relate_predicate( &mut self, a: <I as Interner>::Ty, b: <I as Interner>::Ty, )

Register AliasRelate obligation(s) that both types must be related to each other.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

§

impl<Infcx, I> PredicateEmittingRelation<Infcx> for SolverRelating<'_, Infcx, I>
where Infcx: InferCtxtLike<Interner = I>, I: Interner,