# Trait rustc_infer::infer::canonical::ir::inherent::Clause

source ·

    pub trait Clause<I>: Copy + Debug + Hash + Eq + TypeFoldable<I> + UpcastFrom<I, Binder<I, ClauseKind<I>>> + UpcastFrom<I, TraitRef<I>> + UpcastFrom<I, Binder<I, TraitRef<I>>> + UpcastFrom<I, ProjectionPredicate<I>> + UpcastFrom<I, Binder<I, ProjectionPredicate<I>>> + IntoKind<Kind = Binder<I, ClauseKind<I>>> + Elaboratable<I>where
        I: Interner<Clause = Self>,{
        // Required method
        fn instantiate_supertrait(
            self,
            tcx: I,
            trait_ref: Binder<I, TraitRef<I>>,
        ) -> Self;

        // Provided methods
        fn as_trait_clause(self) -> Option<Binder<I, TraitPredicate<I>>> { ... }
        fn as_projection_clause(self) -> Option<Binder<I, ProjectionPredicate<I>>> { ... }
    }

## Required Methods§

source

#### fn instantiate_supertrait( self, tcx: I, trait_ref: Binder<I, TraitRef<I>>, ) -> Self

Performs a instantiation suitable for going from a poly-trait-ref to supertraits that must hold if that poly-trait-ref holds. This is slightly different from a normal instantiation in terms of what happens with bound regions.

## Provided Methods§

source

#### fn as_trait_clause(self) -> Option<Binder<I, TraitPredicate<I>>>

source

#### fn as_projection_clause(self) -> Option<Binder<I, ProjectionPredicate<I>>>

## Object Safety§

This trait is not object safe.

## Implementations on Foreign Types§

source§

### impl<'tcx> Clause<TyCtxt<'tcx>> for Clause<'tcx>

source§

#### fn instantiate_supertrait( self, tcx: TyCtxt<'tcx>, trait_ref: Binder<TyCtxt<'tcx>, TraitRef<TyCtxt<'tcx>>>, ) -> Clause<'tcx>

## Implementors§