// revisions: base extended //[base] check-fail //[extended] check-pass #![feature(generic_associated_types)] #![cfg_attr(extended, feature(generic_associated_types_extended))] #![cfg_attr(extended, allow(incomplete_features))] pub trait FromLendingIterator: Sized { fn from_iter LendingIterator = A>>(iter: T) -> Self; } impl FromLendingIterator for Vec { fn from_iter LendingIterator = A>>(mut iter: I) -> Self { //[base]~^ impl has stricter let mut v = vec![]; while let Some(item) = iter.next() { v.push(item); } v } } pub trait LendingIterator { type Item<'z> where Self: 'z; fn next(&mut self) -> Option>; fn collect>(self) -> B where Self: Sized, Self: for<'q> LendingIterator = A>, { >::from_iter(self) } } fn main() {}