2 // ignore-compare-mode-nll
3 //[nll] compile-flags: -Z borrowck=mir
5 use std::marker::PhantomData;
7 trait DistributedIterator {
16 trait DistributedIteratorMulti<Source> {
20 struct Connect<I>(PhantomData<fn(I)>);
21 impl<I: for<'a> DistributedIteratorMulti<&'a ()>> DistributedIterator for Connect<I> where {}
23 struct Cloned<Source>(PhantomData<fn(Source)>);
24 impl<'a, Source> DistributedIteratorMulti<&'a Source> for Cloned<&'a Source> {
32 impl<I: DistributedIteratorMulti<Source>, F, Source> DistributedIteratorMulti<Source> for Map<I, F>
34 F: A<<I as DistributedIteratorMulti<Source>>::Item>,
44 fn multi<I>(_reducer: I)
46 I: for<'a> DistributedIteratorMulti<&'a ()>,
48 DistributedIterator::reduce(Connect::<I>(PhantomData))
52 multi(Map { //~ ERROR implementation of `DistributedIteratorMulti` is not general enough
53 i: Cloned(PhantomData),