# Type Alias rustc_trait_selection::traits::PredicateObligation

source ·

    pub type PredicateObligation<'tcx> = Obligation<'tcx, Predicate<'tcx>>;

## Aliased Type§

    struct PredicateObligation<'tcx> {
        pub cause: ObligationCause<'tcx>,
        pub param_env: ParamEnv<'tcx>,
        pub predicate: Predicate<'tcx>,
        pub recursion_depth: usize,
    }

## Fields§

§`cause: ObligationCause<'tcx>`

The reason we have to prove this thing.

§`param_env: ParamEnv<'tcx>`

The environment in which we should prove this thing.

§`predicate: Predicate<'tcx>`

The thing we are trying to prove.

§`recursion_depth: usize`

If we started proving this as a result of trying to prove something else, track the total depth to ensure termination. If this goes over a certain threshold, we abort compilation – in such cases, we can not say whether or not the predicate holds for certain. Stupid halting problem; such a drag.

## Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain `repr(...)` attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 48 bytes