pub trait TypeRelation<'tcx>: Sized {
    fn tcx(&self) -> TyCtxt<'tcx>;
    fn param_env(&self) -> ParamEnv<'tcx>;
    fn tag(&self) -> &'static str;
    fn a_is_expected(&self) -> bool;
    fn relate_with_variance<T: Relate<'tcx>>(
        &mut self,
        variance: Variance,
        info: VarianceDiagInfo<'tcx>,
        a: T,
        b: T
    ) -> RelateResult<'tcx, T>; fn tys(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) -> RelateResult<'tcx, Ty<'tcx>>; fn regions(
        &mut self,
        a: Region<'tcx>,
        b: Region<'tcx>
    ) -> RelateResult<'tcx, Region<'tcx>>; fn consts(
        &mut self,
        a: Const<'tcx>,
        b: Const<'tcx>
    ) -> RelateResult<'tcx, Const<'tcx>>; fn binders<T>(
        &mut self,
        a: Binder<'tcx, T>,
        b: Binder<'tcx, T>
    ) -> RelateResult<'tcx, Binder<'tcx, T>>
        T: Relate<'tcx>
; fn with_cause<F, R>(&mut self, _cause: Cause, f: F) -> R
        F: FnOnce(&mut Self) -> R
, { ... } fn relate<T: Relate<'tcx>>(&mut self, a: T, b: T) -> RelateResult<'tcx, T> { ... } fn relate_item_substs(
        &mut self,
        item_def_id: DefId,
        a_subst: SubstsRef<'tcx>,
        b_subst: SubstsRef<'tcx>
    ) -> RelateResult<'tcx, SubstsRef<'tcx>> { ... } }

Required Methods

Returns a static string we can use for printouts.

Returns true if the value a is the “expected” type in the relation. Just affects error messages.

Switch variance for the purpose of relating a and b.

Provided Methods

Generic relation routine suitable for most anything.

Relate the two substitutions for the given item. The default is to look up the variance for the item and proceed accordingly.