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.