Description
This is a tracking issue for extensions to the minimal generic_associated_types
feature, intended to contain features not intended to be stabilized during initial stabilization. This is primarily for experimentation and likely will remain "incomplete" and almost certainly unsound, at least in the short-term. Longer-term, we like split these features out into separate feature gates, as their implementation becomes more complete.
The RFC for GATs is rust-lang/rfcs#1598, but this feature gate likely will contain features not included in the original RFC.
The feature gate for the issue is #![feature(generic_associated_types_extended)]
.
Repository
- Detailed tracking information is available at the GAT initiative repository
Features included under this feature gate
"Lazy" associated type obligations during projection
Summary
Briefly, this ignores obligations generated during projection when they contain placeholder regions generated from higher-ranked trait bounds. Eventually, the idea is to either check these more logically or to confirm that they are checked with concrete regions.
Implementation history
- Add the generic_associated_types_extended feature #94869: First implemented
- Remove
generic_associated_types_extended
feature gate #133768: Removal
Unresolved questions
- Logically and eagerly prove obligations; or, lazily prove obligations?
Object safe GATs
Summary
This feature allows traits with GATs to be object safe (other object safety requirements must hold).
Implementation history
- Make GATs object safe under generic_associated_types_extended feature #94911: First implementation
Unresolved questions
- There are a number of well-formedness checks that are unimplemented. It's not quite sure how these should or need to be implemented. These are briefly mentioned here: https://github.com/rust-lang/chalk/blob/1f43e8265eb0472700286bf5c0afa30fcf4cec5a/chalk-solve/src/clauses.rs#L442