Permit trait object types where all (non-generic) associated constants are specified (via assoc item bindings) #130300
Labels
A-dyn-compatibility
Area: Dyn compatibility (formerly: object safety)
A-trait-objects
Area: trait objects, vtable layout
C-feature-request
Category: A feature request, i.e: not implemented / a PR.
F-associated_const_equality
`#![feature(associated_const_equality)]`
requires-nightly
This issue requires a nightly compiler in some way.
S-blocked
Status: Blocked on something else such as an RFC or other implementation work.
T-compiler
Relevant to the compiler team, which will review and decide on the PR/issue.
T-types
Relevant to the types team, which will review and decide on the PR/issue.
We permit trait object types where all 'active'1 non-generic associated types are specified (via assoc item bindings). We should extend this to cover 'active' non-generic2 associated constants, too.
Note that I haven't spent much time thinking about soundness yet. I still need to iron out the exact rules. Implementation-wise, I'm almost certain that any advances are blocked by #120905 (more precisely, its underlying issue) which I presume we would need to fix first for correctness.
Minimal & contrived example of something that would start compiling:
Presently, this gets rejected and we emit E0038 (cannot be made into an object).
Lastly, lest I forget, we should emit the lint
unused_associated_type_bounds
3 (#112319) for assoc const bindings where the corresp. assoc const is 'disabled' viawhere Self: Sized
which is only possible to write undergeneric_const_items
(#113521).Footnotes
I.e., not 'made inactive' / 'disabled' via
where Self: Sized
(Don't require associated types with Self: Sized bounds indyn Trait
objects #112319). ↩This might or might not be a temporary restriction. For context, we don't (yet) permit GAT bindings in trait object types either on stable, due to soundness concerns. See
generic_associated_types_extended
(Tracking Issue for extended generic associated types #95451). Also note that generic assoc consts (GACs) are only available undergeneric_const_items
(Tracking issue for generic const items #113521). ↩Indeed, the name would no longer be accurate. Ideally, we would rename the lint when generalizing it. ↩
The text was updated successfully, but these errors were encountered: