|  | use std::convert::TryInto; | 
|  |  | 
|  | trait A<T> { | 
|  | fn foo() {} | 
|  | } | 
|  |  | 
|  | trait B<T, U> { | 
|  | fn bar() {} | 
|  | } | 
|  |  | 
|  | struct S; | 
|  |  | 
|  | impl<T> A<T> for S {} | 
|  | impl<T, U> B<T, U> for S {} | 
|  |  | 
|  | fn main() { | 
|  | let _ = A::foo::<S>(); | 
|  | //~^ ERROR | 
|  | //~| HELP remove the unnecessary generics | 
|  | //~| HELP consider moving this generic argument | 
|  |  | 
|  | let _ = B::bar::<S, S>(); | 
|  | //~^ ERROR | 
|  | //~| HELP remove the unnecessary generics | 
|  | //~| HELP consider moving these generic arguments | 
|  |  | 
|  | let _ = A::<S>::foo::<S>(); | 
|  | //~^ ERROR | 
|  | //~| HELP remove the unnecessary generics | 
|  |  | 
|  | let _ = 42.into::<Option<_>>(); | 
|  | //~^ ERROR | 
|  | //~| HELP remove the unnecessary generics | 
|  | //~| HELP consider moving this generic argument | 
|  | } |