# Trait rustc_middle::ty::relate::TypeRelation

source ·

    pub trait TypeRelation<'tcx>: Sized {
        // Required methods
        fn tcx(&self) -> TyCtxt<'tcx>;
        fn tag(&self) -> &'static str;
        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>>
           where T: Relate<'tcx>;

        // Provided methods
        fn relate<T: Relate<'tcx>>(&mut self, a: T, b: T) -> RelateResult<'tcx, T> { ... }
        fn relate_item_args(
            &mut self,
            item_def_id: DefId,
            a_arg: GenericArgsRef<'tcx>,
            b_arg: GenericArgsRef<'tcx>
        ) -> RelateResult<'tcx, GenericArgsRef<'tcx>> { ... }
    }

## Required Methods§

source

#### fn tcx(&self) -> TyCtxt<'tcx>

source

#### fn tag(&self) -> &'static str

Returns a static string we can use for printouts.

source

#### fn relate_with_variance<T: Relate<'tcx>>( &mut self, variance: Variance, info: VarianceDiagInfo<'tcx>, a: T, b: T ) -> RelateResult<'tcx, T>

Switch variance for the purpose of relating `a` and `b`.

source

#### fn tys(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) -> RelateResult<'tcx, Ty<'tcx>>

source

#### fn regions( &mut self, a: Region<'tcx>, b: Region<'tcx> ) -> RelateResult<'tcx, Region<'tcx>>

source

#### fn consts( &mut self, a: Const<'tcx>, b: Const<'tcx> ) -> RelateResult<'tcx, Const<'tcx>>

source

#### fn binders<T>( &mut self, a: Binder<'tcx, T>, b: Binder<'tcx, T> ) -> RelateResult<'tcx, Binder<'tcx, T>>
where T: Relate<'tcx>,

## Provided Methods§

source

#### fn relate<T: Relate<'tcx>>(&mut self, a: T, b: T) -> RelateResult<'tcx, T>

Generic relation routine suitable for most anything.

source

#### fn relate_item_args( &mut self, item_def_id: DefId, a_arg: GenericArgsRef<'tcx>, b_arg: GenericArgsRef<'tcx> ) -> RelateResult<'tcx, GenericArgsRef<'tcx>>

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

## Object Safety§

This trait is not object safe.

## Implementors§

source§

### impl<'tcx> TypeRelation<'tcx> for MatchAgainstFreshVars<'tcx>