1 #![feature(negative_impls)] 2 #![allow(order_dependent_trait_objects)] 3 4 // Check that the issue #33140 hack does not allow unintended things. 5 6 // OK 7 trait Trait0 {} 8 9 impl Trait0 for dyn Send {} 10 impl Trait0 for dyn Send {} 11 12 // Problem 1: associated types 13 trait Trait1 { my_fn(&self)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 22 trait Trait2 {} 23 24 impl Trait2 for dyn Send {} 25 impl !Trait2 for dyn Send {} 26 //~^ ERROR E0751 27 28 // Problem 3: type parameter 29 trait Trait3<T: ?Sized> {} 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 36 trait Trait4a {} 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 43 trait Trait4b {} 44 45 impl Trait4b for () {} 46 impl Trait4b for () {} 47 //~^ ERROR E0119 48 49 // Problem 4c: not a principal-less trait object 50 trait Trait4c {} 51 52 impl Trait4c for dyn Trait1 + Send {} 53 impl Trait4c for dyn Trait1 + Send {} 54 //~^ ERROR E0119 55 56 // Problem 4d: lifetimes 57 trait Trait4d {} 58 59 impl<'a> Trait4d for dyn Send + 'a {} 60 impl<'a> Trait4d for dyn Send + 'a {} 61 //~^ ERROR E0119 62 63 // Problem 5: where-clauses 64 trait Trait5 {} 65 66 impl Trait5 for dyn Send {} 67 impl Trait5 for dyn Send where u32: Copy {} 68 //~^ ERROR E0119 69 main()70fn main() {} 71