-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Associated const equality conflicts with associated type equality #112560
Comments
Added T-compiler since this particular code could be accepted by making the Added T-lang since in the future, we might want to allow |
Perhaps a |
IMHO I would disallow types and consts to have the same name as in this example: trait Trait1 {
const N: u32;
type N;
} since this is not allowed: trait Trait1<N, const N: usize> {} but that would be a breaking change |
That could be left for a future t-lang discussion. I've already got a fix locally since we can always continue to require curly braces for paths Forbidding assoc consts & types if they're identically named would be pretty inconsistent, they live in different namespaces after all. Further, assoc const equality bounds are pretty niche, no reason to add special cases just for them. What's more, while identically named assoc consts & types are relatively rare, the following code involving supertraits could come up in practice I'd argue: trait A: B { type X; }
trait B { const X: (); }
// A<X = { () }> My patch is going to handle the case above as well. |
…y-namespace, r=compiler-errors Resolve associated item bindings by namespace This is the 3rd commit split off from rust-lang#118360 with tests reblessed (they no longer contain duplicated diags which were caused by 4c0addc) & slightly adapted (removed supertraits from a UI test, cc rust-lang#118040). > * Resolve all assoc item bindings (type, const, fn (feature `return_type_notation`)) by namespace instead of trying to resolve a type first (in the non-RTN case) and falling back to consts afterwards. This is consistent with RTN. E.g., for `Tr<K = {…}>` we now always try to look up assoc consts (this extends to supertrait bounds). This gets rid of assoc tys shadowing assoc consts in assoc item bindings which is undesirable & inconsistent (types and consts live in different namespaces after all) > * Consolidate the resolution of assoc {ty, const} bindings and RTN (dedup, better diags for RTN) > * Fix assoc consts being labeled as assoc *types* in several diagnostics > * Make a bunch of diagnostics translatable Fixes rust-lang#112560 (error → pass). As discussed r? `@compiler-errors` --- **Addendum**: What I call “associated item bindings” are commonly referred to as “type bindings” for historical reasons. Nowadays, “type bindings” include assoc type bindings, assoc const bindings and RTN (return type notation) which is why I prefer not to use this outdated term.
I tried this code and it compiled:
Then I tried this code and it didn't compile:
Meta
rustc --version --verbose
:Backtrace
Explanation
Rust allows for associated const parameter and associated type parameter to have the same name. So, I expected there would be some way to disambiguate which one I'm referring to when setting the equality constraint but haven't found a way to do so.
This problem is related to Associated Const Equality
The text was updated successfully, but these errors were encountered: