type_alias_enum_variants

The tracking issue for this feature is: #49683


The type_alias_enum_variants feature enables the use of variants on type aliases that refer to enums, as both a constructor and a pattern. That is, it allows for the syntax EnumAlias::Variant, which behaves exactly the same as Enum::Variant (assuming that EnumAlias is an alias for some enum type Enum).

Note that since Self exists as a type alias, this feature also enables the use of the syntax Self::Variant within an impl block for an enum type.

#![feature(type_alias_enum_variants)]

enum Foo {
    Bar(i32),
    Baz { i: i32 },
}

type Alias = Foo;

fn main() {
    let t = Alias::Bar(0);
    let t = Alias::Baz { i: 0 };
    match t {
        Alias::Bar(_i) => {}
        Alias::Baz { i: _i } => {}
    }
}