Rollup merge of #101360 - compiler-errors:multiple-closure-bounds, r=petrochenkov

Point out incompatible closure bounds

Fixes #100295
This commit is contained in:
Matthias Krüger 2022-10-10 20:47:31 +02:00 committed by GitHub
commit d8d01e3216
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 107 additions and 0 deletions

View file

@ -0,0 +1,15 @@
fn foo<F: Fn(&char) -> bool + Fn(char) -> bool>(f: F) {
//~^ NOTE required by a bound in `foo`
//~| NOTE required by this bound in `foo`
//~| NOTE closure inferred to have a different signature due to this bound
todo!();
}
fn main() {
let v = true;
foo(move |x| v);
//~^ ERROR type mismatch in closure arguments
//~| NOTE expected closure signature
//~| NOTE expected due to this
//~| NOTE found signature defined here
}

View file

@ -0,0 +1,24 @@
error[E0631]: type mismatch in closure arguments
--> $DIR/multiple-fn-bounds.rs:10:5
|
LL | foo(move |x| v);
| ^^^ -------- found signature defined here
| |
| expected due to this
|
= note: expected closure signature `fn(char) -> _`
found closure signature `for<'a> fn(&'a char) -> _`
note: closure inferred to have a different signature due to this bound
--> $DIR/multiple-fn-bounds.rs:1:11
|
LL | fn foo<F: Fn(&char) -> bool + Fn(char) -> bool>(f: F) {
| ^^^^^^^^^^^^^^^^^
note: required by a bound in `foo`
--> $DIR/multiple-fn-bounds.rs:1:31
|
LL | fn foo<F: Fn(&char) -> bool + Fn(char) -> bool>(f: F) {
| ^^^^^^^^^^^^^^^^ required by this bound in `foo`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0631`.