So I have a question about GATs: since there was a lot of concern about the complexity cost they add, was it not possible to just define traits with generic params (instead of generic associated types, GATs) to achieve everything GATs could? To demonstrate, doesn't something like this work for lending iterators?
trait LendingIterator<'a, T> {
fn next(&'a mut self) -> Option<&'a T>;
}
impl<'a, T> LendingIterator<'a, T> for Whatever {
fn next(&'a mut self) -> Option<&'a T> {
todo!()
}
}
And of course, you'd modify the for loop syntax to desugar appropriately if the the iterator implements LendingIterator.