]>
Commit | Line | Data |
---|---|---|
72b1a166 | 1 | #![feature(negative_impls)] |
0731742a XL |
2 | #![allow(order_dependent_trait_objects)] |
3 | ||
4 | // Check that the issue #33140 hack does not allow unintended things. | |
5 | ||
6 | // OK | |
72b1a166 | 7 | trait Trait0 {} |
0731742a XL |
8 | |
9 | impl Trait0 for dyn Send {} | |
10 | impl Trait0 for dyn Send {} | |
11 | ||
12 | // Problem 1: associated types | |
13 | trait Trait1 { | |
14 | fn my_fn(&self) {} | |
15 | } | |
16 | ||
17 | impl Trait1 for dyn Send {} | |
18 | impl Trait1 for dyn Send {} | |
19 | //~^ ERROR E0119 | |
20 | ||
21 | // Problem 2: negative impl | |
72b1a166 | 22 | trait Trait2 {} |
0731742a XL |
23 | |
24 | impl Trait2 for dyn Send {} | |
25 | impl !Trait2 for dyn Send {} | |
72b1a166 | 26 | //~^ ERROR E0751 |
0731742a XL |
27 | |
28 | // Problem 3: type parameter | |
72b1a166 | 29 | trait Trait3<T: ?Sized> {} |
0731742a XL |
30 | |
31 | impl Trait3<dyn Sync> for dyn Send {} | |
32 | impl Trait3<dyn Sync> for dyn Send {} | |
33 | //~^ ERROR E0119 | |
34 | ||
35 | // Problem 4a: not a trait object - generic | |
72b1a166 | 36 | trait Trait4a {} |
0731742a XL |
37 | |
38 | impl<T: ?Sized> Trait4a for T {} | |
39 | impl Trait4a for dyn Send {} | |
40 | //~^ ERROR E0119 | |
41 | ||
42 | // Problem 4b: not a trait object - misc | |
72b1a166 | 43 | trait Trait4b {} |
0731742a XL |
44 | |
45 | impl Trait4b for () {} | |
46 | impl Trait4b for () {} | |
47 | //~^ ERROR E0119 | |
48 | ||
49 | // Problem 4c: not a principal-less trait object | |
72b1a166 | 50 | trait Trait4c {} |
0731742a XL |
51 | |
52 | impl Trait4c for dyn Trait1 + Send {} | |
53 | impl Trait4c for dyn Trait1 + Send {} | |
54 | //~^ ERROR E0119 | |
55 | ||
56 | // Problem 4d: lifetimes | |
72b1a166 | 57 | trait Trait4d {} |
0731742a XL |
58 | |
59 | impl<'a> Trait4d for dyn Send + 'a {} | |
60 | impl<'a> Trait4d for dyn Send + 'a {} | |
61 | //~^ ERROR E0119 | |
62 | ||
0731742a | 63 | // Problem 5: where-clauses |
72b1a166 | 64 | trait Trait5 {} |
0731742a XL |
65 | |
66 | impl Trait5 for dyn Send {} | |
67 | impl Trait5 for dyn Send where u32: Copy {} | |
68 | //~^ ERROR E0119 | |
69 | ||
70 | fn main() {} |