# Trait rustc_trait_selection::traits::util::Elaboratable

source ·

    pub trait Elaboratable<'tcx> {
        // Required methods
        fn predicate(&self) -> Predicate<'tcx>;
        fn child(&self, clause: Clause<'tcx>) -> Self;
        fn child_with_derived_cause(
            &self,
            clause: Clause<'tcx>,
            span: Span,
            parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>,
            index: usize
        ) -> Self;
    }

Expand description

Describes how to elaborate an obligation into a sub-obligation.

For `Obligation`, a sub-obligation is combined with the current obligation’s param-env and cause code. For `ty::Predicate`, none of this is needed, since there is no param-env or cause code to copy over.

## Required Methods§

source

#### fn predicate(&self) -> Predicate<'tcx>

source

#### fn child(&self, clause: Clause<'tcx>) -> Self

source

#### fn child_with_derived_cause( &self, clause: Clause<'tcx>, span: Span, parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>, index: usize ) -> Self

## Object Safety§

This trait is not object safe.

## Implementations on Foreign Types§

source§

### impl<'tcx> Elaboratable<'tcx> for (Clause<'tcx>, Span)

source§

#### fn predicate(&self) -> Predicate<'tcx>

source§

#### fn child(&self, clause: Clause<'tcx>) -> (Clause<'tcx>, Span)

source§

#### fn child_with_derived_cause( &self, clause: Clause<'tcx>, _span: Span, _parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>, _index: usize ) -> (Clause<'tcx>, Span)

source§

### impl<'tcx> Elaboratable<'tcx> for (Predicate<'tcx>, Span)

source§

#### fn predicate(&self) -> Predicate<'tcx>

source§

#### fn child(&self, clause: Clause<'tcx>) -> (Predicate<'tcx>, Span)

source§

#### fn child_with_derived_cause( &self, clause: Clause<'tcx>, _span: Span, _parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>, _index: usize ) -> (Predicate<'tcx>, Span)

source§

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

source§

#### fn predicate(&self) -> Predicate<'tcx>

source§

#### fn child(&self, clause: Clause<'tcx>) -> Clause<'tcx>

source§

#### fn child_with_derived_cause( &self, clause: Clause<'tcx>, _span: Span, _parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>, _index: usize ) -> Clause<'tcx>

source§

### impl<'tcx> Elaboratable<'tcx> for Predicate<'tcx>

source§

#### fn predicate(&self) -> Predicate<'tcx>

source§

#### fn child(&self, clause: Clause<'tcx>) -> Predicate<'tcx>

source§

#### fn child_with_derived_cause( &self, clause: Clause<'tcx>, _span: Span, _parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>, _index: usize ) -> Predicate<'tcx>

## Implementors§

source§

### impl<'tcx> Elaboratable<'tcx> for Obligation<'tcx, Predicate<'tcx>>