use std::time::Instant; enum Enum { First } #[derive(Clone)] enum CloneEnum { First } struct Struct { } #[derive(Clone)] struct CloneStruct { } struct Foo<X, Y> (X, Y); impl<X: Clone + Default + , Y: Clone + Default> Foo<X, Y> { fn test(&self) -> (X, Y) { (self.0, self.1) } } fn test1() { let x = Foo(Enum::First, CloneEnum::First); let y = x.test(); //~^the method `test` exists for struct `Foo<Enum, CloneEnum>`, but its trait bounds were not satisfied [E0599] } fn test2() { let x = Foo(Struct{}, CloneStruct{}); let y = x.test(); //~^the method `test` exists for struct `Foo<Struct, CloneStruct>`, but its trait bounds were not satisfied [E0599] } fn test3() { let x = Foo(Vec::<Enum>::new(), Instant::now()); let y = x.test(); //~^the method `test` exists for struct `Foo<Vec<Enum>, Instant>`, but its trait bounds were not satisfied [E0599] } fn main() {}