]> git.proxmox.com Git - rustc.git/blob - src/test/ui/run-pass/issues/issue-43132.rs
New upstream version 1.30.0~beta.7+dfsg1
[rustc.git] / src / test / ui / run-pass / issues / issue-43132.rs
1 // Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // run-pass
12 #![allow(unused)]
13
14 fn main() {
15 }
16
17 fn foo() {
18 let b = mk::<
19 Forward<(Box<Future<Error = u32>>,)>,
20 >();
21 b.map_err(|_| ()).join();
22 }
23
24 fn mk<T>() -> T {
25 loop {}
26 }
27
28 impl<I: Future<Error = E>, E> Future for (I,) {
29 type Error = E;
30 }
31
32 struct Forward<T: Future> {
33 _a: T,
34 }
35
36 impl<T: Future> Future for Forward<T>
37 where
38 T::Error: From<u32>,
39 {
40 type Error = T::Error;
41 }
42
43 trait Future {
44 type Error;
45
46 fn map_err<F, E>(self, _: F) -> (Self, F)
47 where
48 F: FnOnce(Self::Error) -> E,
49 Self: Sized,
50 {
51 loop {}
52 }
53
54 fn join(self) -> (MaybeDone<Self>, ())
55 where
56 Self: Sized,
57 {
58 loop {}
59 }
60 }
61
62 impl<S: ?Sized + Future> Future for Box<S> {
63 type Error = S::Error;
64 }
65
66 enum MaybeDone<A: Future> {
67 _Done(A::Error),
68 }
69
70 impl<U, A: Future, F> Future for (A, F)
71 where
72 F: FnOnce(A::Error) -> U,
73 {
74 type Error = U;
75 }