mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-09 13:33:43 +00:00
![]() Implement RFC 2338, "Type alias enum variants" This PR implements [RFC 2338](https://github.com/rust-lang/rfcs/pull/2338), allowing one to write code like the following. ```rust #![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 } => {} } } ``` Since `Self` can be considered a type alias in this context, it also enables using `Self::Variant` as both a constructor and pattern. Fixes issues #56199 and #56611. N.B., after discussing the syntax for type arguments on enum variants with @petrochenkov and @eddyb (there are also a few comments on the [tracking issue](https://github.com/rust-lang/rust/issues/49683)), the consensus seems to be treat the syntax as follows, which ought to be backwards-compatible. ```rust Option::<u8>::None; // OK Option::None::<u8>; // OK, but lint in near future (hard error next edition?) Alias::<u8>::None; // OK Alias::None::<u8>; // Error ``` I do not know if this will need an FCP, but let's start one if so. |
||
---|---|---|
.. | ||
auxiliary | ||
codegen | ||
codegen-units | ||
compile-fail | ||
compile-fail-fulldeps/auxiliary | ||
debuginfo | ||
incremental | ||
mir-opt | ||
pretty | ||
run-fail | ||
run-fail-fulldeps | ||
run-make | ||
run-make-fulldeps | ||
run-pass | ||
run-pass-fulldeps | ||
run-pass-valgrind | ||
rustdoc | ||
rustdoc-js | ||
rustdoc-ui | ||
rustfix | ||
ui | ||
ui-fulldeps | ||
COMPILER_TESTS.md |