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
sourcefn structurally_relate_aliases(&self) -> StructurallyRelateAliases
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.
sourcefn register_goals(
&mut self,
obligations: impl IntoIterator<Item = Goal<I, <I as Interner>::Predicate>>,
)
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
sourcefn register_predicates(
&mut self,
obligations: impl IntoIterator- >,
)
fn register_predicates(
&mut self,
obligations: impl IntoIterator- >,
)
Register predicates that must hold in order for this relation to hold.
This uses the default param_env
of the obligation.
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.