Trait rustc_infer::infer::PredicateEmittingRelation

source ·
pub trait PredicateEmittingRelation<'tcx>: TypeRelation<TyCtxt<'tcx>> {
    // Required methods
    fn span(&self) -> Span;
    fn param_env(&self) -> ParamEnv<'tcx>;
    fn structurally_relate_aliases(&self) -> StructurallyRelateAliases;
    fn register_goals(
        &mut self,
        obligations: impl IntoIterator<Item = Goal<'tcx, Predicate<'tcx>>>,
    );
    fn register_predicates(
        &mut self,
        obligations: impl IntoIterator<Item: Upcast<TyCtxt<'tcx>, Predicate<'tcx>>>,
    );
    fn register_alias_relate_predicate(&mut self, a: Ty<'tcx>, b: Ty<'tcx>);
}

Required Methods§

source

fn span(&self) -> Span

source

fn param_env(&self) -> ParamEnv<'tcx>

source

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.

source

fn register_goals( &mut self, obligations: impl IntoIterator<Item = Goal<'tcx, Predicate<'tcx>>>, )

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

source

fn register_predicates( &mut self, obligations: impl IntoIterator<Item: Upcast<TyCtxt<'tcx>, Predicate<'tcx>>>, )

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

source

fn register_alias_relate_predicate(&mut self, a: Ty<'tcx>, b: Ty<'tcx>)

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

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'tcx> PredicateEmittingRelation<'tcx> for Glb<'_, '_, 'tcx>

source§

impl<'tcx> PredicateEmittingRelation<'tcx> for Lub<'_, '_, 'tcx>

source§

impl<'tcx> PredicateEmittingRelation<'tcx> for TypeRelating<'_, '_, 'tcx>