Skip to main content

## AliasTyKind

# Type Alias AliasTyKind

Source

    pub type AliasTyKind<'tcx> = AliasTyKind<TyCtxt<'tcx>>;

## Aliased Type§

    pub enum AliasTyKind<'tcx> {
        Projection {
            def_id: DefId,
        },
        Inherent {
            def_id: DefId,
        },
        Opaque {
            def_id: DefId,
        },
        Free {
            def_id: DefId,
        },
    }

## Variants§

§

### Projection

A projection `<Type as Trait>::AssocType`.

Can get normalized away if monomorphic enough.

The `def_id` is the `DefId` of the `TraitItem` for the associated type.

Note that the `def_id` is not the `DefId` of the `TraitRef` containing this associated type, which is in `interner.associated_item(def_id).container`, aka. `interner.parent(def_id)`.

#### Fields

§`def_id: DefId`
§

### Inherent

An associated type in an inherent `impl`

The `def_id` is the `DefId` of the `ImplItem` for the associated type.

#### Fields

§`def_id: DefId`
§

### Opaque

An opaque type (usually from `impl Trait` in type aliases or function return types)

`def_id` is the `DefId` of the `OpaqueType` item.

Can only be normalized away in `PostAnalysis` mode or its defining scope.

During codegen, `interner.type_of(def_id)` can be used to get the type of the underlying type if the type is an opaque.

#### Fields

§`def_id: DefId`
§

### Free

A type alias that actually checks its trait bounds.

Currently only used if the type alias references opaque types. Can always be normalized away.

#### Fields

§`def_id: DefId`

## Layout§

Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.