mirror of https://github.com/rust-lang/rust
36 lines
733 B
Rust
36 lines
733 B
Rust
pub trait LendingIterator {
|
|
type Item<'a>
|
|
where
|
|
Self: 'a;
|
|
|
|
fn consume<F>(self, _f: F)
|
|
where
|
|
Self: Sized,
|
|
for<'a> Self::Item<'a>: FuncInput<'a, Self::Item<'a>>,
|
|
{
|
|
}
|
|
}
|
|
|
|
impl<I: LendingIterator + ?Sized> LendingIterator for &mut I {
|
|
type Item<'a> = I::Item<'a> where Self: 'a;
|
|
}
|
|
struct EmptyIter;
|
|
impl LendingIterator for EmptyIter {
|
|
type Item<'a> = &'a mut () where Self:'a;
|
|
}
|
|
pub trait FuncInput<'a, F>
|
|
where
|
|
F: Foo<Self>,
|
|
Self: Sized,
|
|
{
|
|
}
|
|
impl<'a, T, F: 'a> FuncInput<'a, F> for T where F: Foo<T> {}
|
|
trait Foo<T> {}
|
|
|
|
fn map_test() {
|
|
(&mut EmptyIter).consume(());
|
|
//~^ ERROR the trait bound `for<'a> &'a mut (): Foo<&'a mut ()>` is not satisfied
|
|
}
|
|
|
|
fn main() {}
|