# Trait rustc_infer::infer::nll_relate::TypeRelatingDelegate

source ·

    pub trait TypeRelatingDelegate<'tcx> {
        // Required methods
        fn param_env(&self) -> ParamEnv<'tcx>;
        fn span(&self) -> Span;
        fn push_outlives(
            &mut self,
            sup: Region<'tcx>,
            sub: Region<'tcx>,
            info: VarianceDiagInfo<'tcx>
        );
        fn register_obligations(&mut self, obligations: PredicateObligations<'tcx>);
        fn create_next_universe(&mut self) -> UniverseIndex;
        fn next_existential_region_var(
            &mut self,
            was_placeholder: bool,
            name: Option<Symbol>
        ) -> Region<'tcx>;
        fn next_placeholder_region(
            &mut self,
            placeholder: PlaceholderRegion
        ) -> Region<'tcx>;
        fn generalize_existential(
            &mut self,
            universe: UniverseIndex
        ) -> Region<'tcx>;
        fn forbid_inference_vars() -> bool;
    }

## Required Methods§

source

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

source

#### fn span(&self) -> Span

source

#### fn push_outlives( &mut self, sup: Region<'tcx>, sub: Region<'tcx>, info: VarianceDiagInfo<'tcx> )

Push a constraint `sup: sub` – this constraint must be satisfied for the two types to be related. `sub` and `sup` may be regions from the type or new variables created through the delegate.

source

#### fn register_obligations(&mut self, obligations: PredicateObligations<'tcx>)

source

#### fn create_next_universe(&mut self) -> UniverseIndex

Creates a new universe index. Used when instantiating placeholders.

source

#### fn next_existential_region_var( &mut self, was_placeholder: bool, name: Option<Symbol> ) -> Region<'tcx>

Creates a new region variable representing a higher-ranked region that is instantiated existentially. This creates an inference variable, typically.

So e.g., if you have `for<'a> fn(..) <: for<'b> fn(..)`, then we will invoke this method to instantiate `'a` with an inference variable (though `'b` would be instantiated first, as a placeholder).

source

#### fn next_placeholder_region( &mut self, placeholder: PlaceholderRegion ) -> Region<'tcx>

Creates a new region variable representing a higher-ranked region that is instantiated universally. This creates a new region placeholder, typically.

So e.g., if you have `for<'a> fn(..) <: for<'b> fn(..)`, then we will invoke this method to instantiate `'b` with a placeholder region.

source

#### fn generalize_existential(&mut self, universe: UniverseIndex) -> Region<'tcx>

Creates a new existential region in the given universe. This is used when handling subtyping and type variables – if we have that `?X <: Foo<'a>`, for example, we would instantiate `?X` with a type like `Foo<'?0>` where `'?0` is a fresh existential variable created by this function. We would then relate `Foo<'?0>` with `Foo<'a>` (and probably add an outlives relation stating that `'?0: 'a`).

source

#### fn forbid_inference_vars() -> bool

Enables some optimizations if we do not expect inference variables in the RHS of the relation.

## Object Safety§

This trait is not object safe.

## Implementors§

source§

### impl<'tcx> TypeRelatingDelegate<'tcx> for QueryTypeRelatingDelegate<'_, 'tcx>