Change:
<ins> error[E0053]: method `owo` has an incompatible type for trait --> $DIR/method-signature-matches.rs:11:15 | LL |     fn owo(_: u8) {} |               ^^ |               | |               expected `()`, found `u8` |               help: change the parameter type to match the trait: `()` | note: type in trait --> $DIR/method-signature-matches.rs:7:15 | LL |     fn owo(x: ()) -> impl Sized; |               ^^ = note: expected fn pointer `fn(())` found fn pointer `fn(u8)` error[E0053]: method `owo` has an incompatible type for trait --> $DIR/method-signature-matches.rs:20:21 | LL |     async fn owo(_: u8) {} |                     ^^ |                     | |                     expected `()`, found `u8` |                     help: change the parameter type to match the trait: `()` | note: while checking the return type of the `async fn` --> $DIR/method-signature-matches.rs:20:25 | LL |     async fn owo(_: u8) {} |                         ^ checked the `Output` of this `async fn`, expected opaque type note: while checking the return type of the `async fn` --> $DIR/method-signature-matches.rs:20:25 | LL |     async fn owo(_: u8) {} |                         ^ checked the `Output` of this `async fn`, found opaque type note: type in trait --> $DIR/method-signature-matches.rs:16:21 | LL |     async fn owo(x: ()) {} |                     ^^ = note: expected fn pointer `fn(()) -> _` found fn pointer `fn(u8) -> _` error[E0050]: method `calm_down_please` has 3 parameters but the declaration in trait `TooMuch::calm_down_please` has 0 --> $DIR/method-signature-matches.rs:29:28 | LL |     fn calm_down_please() -> impl Sized; |     ------------------------------------ trait requires 0 parameters ... LL |     fn calm_down_please(_: (), _: (), _: ()) {} |                            ^^^^^^^^^^^^^^^^ expected 0 parameters, found 3 error[E0050]: method `come_on_a_little_more_effort` has 0 parameters but the declaration in trait `TooLittle::come_on_a_little_more_effort` has 3 --> $DIR/method-signature-matches.rs:38:5 | LL |     fn come_on_a_little_more_effort(_: (), _: (), _: ()) -> impl Sized; |                                        ---------------- trait requires 3 parameters ... LL |     fn come_on_a_little_more_effort() {} |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 3 parameters, found 0 error[E0053]: method `early` has an incompatible type for trait --> $DIR/method-signature-matches.rs:47:27 | LL |     fn early<'late, T>(_: &'late ()) {} |                     -     ^^^^^^^^^ |                     |     | |                     |     expected type parameter `T`, found `()` |                     |     help: change the parameter type to match the trait: `&'early T` |                     this type parameter | note: type in trait --> $DIR/method-signature-matches.rs:43:28 | LL |     fn early<'early, T>(x: &'early T) -> impl Sized; |                            ^^^^^^^^^ = note: expected fn pointer `fn(&'early T)` found fn pointer `fn(&())` error: aborting due to 5 previous errors Some errors have detailed explanations: E0050, E0053. For more information about an error, try `rustc --explain E0050`. </ins>

Discussion:
Essentially, if my trait has and my impl has the compiler panics. Note that the code is invalid and compilation should fail. <!-- If you're using the stable version of the compiler, you should also check if the bug also exists in the beta or nightly versions. --: Note that I'm using which is experimental. <!-- TRIAGEBOTSTART --<!-- TRIAGEBOTASSIGNSTART --<!-- TRIAGEBOTASSIGNDATASTARTTRIAGEBOTASSIGNDATAEND --<!-- TRIAGEBOTASSIGNEND --<!-- TRIAGEBOT_END --
This happens for all type mismatches in the arguments (but not the arity!) A : <details<summaryWith the following backtrace: </summary</details
When not using a normal , the proper error is emitted here inside : But something gets messed up with the return position impl trait in trait desugaring that doesn't make this work (the arity check above does work). claim