]> git.lizzy.rs Git - rust.git/blob - src/test/ui/issues/issue-55731.rs
Use revisions for NLL in issues
[rust.git] / src / test / ui / issues / issue-55731.rs
1 // revisions: base nll
2 // ignore-compare-mode-nll
3 //[nll] compile-flags: -Z borrowck=mir
4
5 use std::marker::PhantomData;
6
7 trait DistributedIterator {
8     fn reduce(self)
9     where
10         Self: Sized,
11     {
12         unreachable!()
13     }
14 }
15
16 trait DistributedIteratorMulti<Source> {
17     type Item;
18 }
19
20 struct Connect<I>(PhantomData<fn(I)>);
21 impl<I: for<'a> DistributedIteratorMulti<&'a ()>> DistributedIterator for Connect<I> where {}
22
23 struct Cloned<Source>(PhantomData<fn(Source)>);
24 impl<'a, Source> DistributedIteratorMulti<&'a Source> for Cloned<&'a Source> {
25     type Item = ();
26 }
27
28 struct Map<I, F> {
29     i: I,
30     f: F,
31 }
32 impl<I: DistributedIteratorMulti<Source>, F, Source> DistributedIteratorMulti<Source> for Map<I, F>
33 where
34     F: A<<I as DistributedIteratorMulti<Source>>::Item>,
35 {
36     type Item = ();
37 }
38
39 trait A<B> {}
40
41 struct X;
42 impl A<()> for X {}
43
44 fn multi<I>(_reducer: I)
45 where
46     I: for<'a> DistributedIteratorMulti<&'a ()>,
47 {
48     DistributedIterator::reduce(Connect::<I>(PhantomData))
49 }
50
51 fn main() {
52     multi(Map { //~ ERROR implementation of `DistributedIteratorMulti` is not general enough
53         i: Cloned(PhantomData),
54         f: X,
55     });
56 }