#![feature(optin_builtin_traits)] #![allow(order_dependent_trait_objects)] // Check that the issue #33140 hack does not allow unintended things. // OK trait Trait0 { } impl Trait0 for dyn Send {} impl Trait0 for dyn Send {} // Problem 1: associated types trait Trait1 { fn my_fn(&self) {} } impl Trait1 for dyn Send {} impl Trait1 for dyn Send {} //~^ ERROR E0119 // Problem 2: negative impl trait Trait2 { } impl Trait2 for dyn Send {} impl !Trait2 for dyn Send {} //~^ ERROR E0119 // Problem 3: type parameter trait Trait3 { } impl Trait3 for dyn Send {} impl Trait3 for dyn Send {} //~^ ERROR E0119 // Problem 4a: not a trait object - generic trait Trait4a { } impl Trait4a for T {} impl Trait4a for dyn Send {} //~^ ERROR E0119 // Problem 4b: not a trait object - misc trait Trait4b { } impl Trait4b for () {} impl Trait4b for () {} //~^ ERROR E0119 // Problem 4c: not a principal-less trait object trait Trait4c { } impl Trait4c for dyn Trait1 + Send {} impl Trait4c for dyn Trait1 + Send {} //~^ ERROR E0119 // Problem 4d: lifetimes trait Trait4d { } impl<'a> Trait4d for dyn Send + 'a {} impl<'a> Trait4d for dyn Send + 'a {} //~^ ERROR E0119 // Problem 5: where-clauses trait Trait5 { } impl Trait5 for dyn Send {} impl Trait5 for dyn Send where u32: Copy {} //~^ ERROR E0119 fn main() {}