Closed
Description
trait Foo {
type T<'a>: Sized where Self: 'a;
}
impl Foo for &() {
type T<'a> = ();
}
This fails in the old solver, passes in the new solver. This fails in the old solver because in check_type_bounds
we normalize the item bound like <&() as Foo>::T<'a>: Sized
into (): Sized
, but when normalizing we also require proving the GAT where clauses hold.
In the new solver we simply structurally replace instances of GATs with their definition type using the ReplaceTy
folder, which is a kind of "normalization" but which doesn't require that the GAT where clauses hold.
For now, we could just register the GAT bounds in check_type_bounds
to paper over this problem, though I think we could think harder about how and where GAT where clauses are required to hold in normalization...
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
done