pub trait PredicateEmittingRelation<Infcx, I = I>: TypeRelation<I>where
Infcx: InferCtxtLike<Interner = I>,
I: Interner,{
// Required methods
fn span(&self) -> I::Span;
fn param_env(&self) -> I::ParamEnv;
fn structurally_relate_aliases(&self) -> StructurallyRelateAliases;
fn register_goals(
&mut self,
obligations: impl IntoIterator<Item = Goal<I, I::Predicate>>,
);
fn register_predicates(
&mut self,
obligations: impl IntoIterator<Item: Upcast<I, I::Predicate>>,
);
fn register_alias_relate_predicate(&mut self, a: I::Ty, b: I::Ty);
}
Required Methods§
fn span(&self) -> I::Span
fn param_env(&self) -> I::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::Predicate>>,
)
fn register_goals( &mut self, obligations: impl IntoIterator<Item = Goal<I, I::Predicate>>, )
Register obligations that must hold in order for this relation to hold
sourcefn register_predicates(
&mut self,
obligations: impl IntoIterator<Item: Upcast<I, I::Predicate>>,
)
fn register_predicates( &mut self, obligations: impl IntoIterator<Item: Upcast<I, I::Predicate>>, )
Register predicates that must hold in order for this relation to hold.
This uses the default param_env
of the obligation.
sourcefn register_alias_relate_predicate(&mut self, a: I::Ty, b: I::Ty)
fn register_alias_relate_predicate(&mut self, a: I::Ty, b: I::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.