# Type Alias rustc_infer::traits::Selection

source ·

    pub type Selection<'tcx> = ImplSource<'tcx, PredicateObligation<'tcx>>;

## Aliased Type§

    enum Selection<'tcx> {
        UserDefined(ImplSourceUserDefinedData<'tcx, Obligation<'tcx, Predicate<'tcx>>>),
        Param(Vec<Obligation<'tcx, Predicate<'tcx>>>),
        Builtin(BuiltinImplSource, Vec<Obligation<'tcx, Predicate<'tcx>>>),
    }

## Variants§

§

### UserDefined(ImplSourceUserDefinedData<'tcx, Obligation<'tcx, Predicate<'tcx>>>)

ImplSource identifying a particular impl.

§

### Param(Vec<Obligation<'tcx, Predicate<'tcx>>>)

Successful resolution to an obligation provided by the caller for some type parameter. The `Vec<N>` represents the obligations incurred from normalizing the where-clause (if any).

§

### Builtin(BuiltinImplSource, Vec<Obligation<'tcx, Predicate<'tcx>>>)

Successful resolution for a builtin impl.

## 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

Size for each variant:

- `UserDefined`: 40 bytes
- `Param`: 24 bytes
- `Builtin`: 40 bytes