You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I think this is the wrong place for the primary docs since it adds to the confusion around the misnomer that type_alias_enum_variants is. In other words, it is not about type aliases, but about type relative resolution to enum variants.
What we should focus on is making sure the following is covered in some form:
Reference guide
In the value and type namespaces, type-relative resolution to an enum variant is permitted.
This applies to expressions and patterns alike.
Type relative resolution
Let E denote an enum definition with variants V0 to Vn.
Let F denote a type expression normalizing to E with generic substitutions Si.
Then a path <F>::Vj may resolve, with highest priority, in the value and type namespaces, to the variant Vj.
Desugaring to type-relative resolution (pre-existing on stable)
Let X be an associated item of G.
A path G::X is equivalent to <G<..>>::X where .. denotes as many inference variables as G needs if it is generic.
A path G::<A0, .., An>::X is equivalent to <G::<A0, .., An>>::X.
Note that while resolution in the type namespace to an enum variant is allowed, enum variants themselves are not types (rust-lang/rfcs#2593 would allow that).
Since name resolution is not documented, I think it may be a bit difficult or awkward to define this in an adequate way. My intent was just that the clause at the bottom of that page is now wrong, it should be updated (or maybe removed if we don't want to have it there).
If you want, we can just remove the note and make this a sub-task of #568.
Activity
Centril commentedon Jul 5, 2019
I think this is the wrong place for the primary docs since it adds to the confusion around the misnomer that
type_alias_enum_variantsis. In other words, it is not about type aliases, but about type relative resolution toenumvariants.cc @eddyb @petrochenkov
What we should focus on is making sure the following is covered in some form:
Reference guide
In the value and type namespaces, type-relative resolution to an
enumvariant is permitted.This applies to expressions and patterns alike.
Type relative resolution
Let
Edenote anenumdefinition with variantsV0toVn.Let
Fdenote a type expression normalizing toEwith generic substitutionsSi.Then a path
<F>::Vjmay resolve, with highest priority, in the value and type namespaces, to the variantVj.Desugaring to type-relative resolution (pre-existing on stable)
Let
Xbe an associated item ofG.A path
G::Xis equivalent to<G<..>>::Xwhere..denotes as many inference variables asGneeds if it is generic.A path
G::<A0, .., An>::Xis equivalent to<G::<A0, .., An>>::X.Note that while resolution in the type namespace to an
enumvariant is allowed,enumvariants themselves are not types (rust-lang/rfcs#2593 would allow that).Centril commentedon Jul 5, 2019
Yeah but it may take a while to get to... tho if someone wants to have a go at it that would be lovely.
ehuss commentedon Jul 5, 2019
Since name resolution is not documented, I think it may be a bit difficult or awkward to define this in an adequate way. My intent was just that the clause at the bottom of that page is now wrong, it should be updated (or maybe removed if we don't want to have it there).
If you want, we can just remove the note and make this a sub-task of #568.
Centril commentedon Jul 5, 2019
Yes this seems like a decent interim solution, but we should keep this issue open as a sub-task of #568 then.