--- /dev/null
+struct S<'a>(&'a str);
+
+fn f(inner: fn(&str, &S)) {
+}
+
+#[allow(unreachable_code)]
+fn main() {
+ let inner: fn(_, _) = unimplemented!();
+ f(inner); //~ ERROR mismatched types
+}
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/closure-with-wrong-borrows.rs:9:7
+ |
+LL | f(inner);
+ | - ^^^^^ one type is more general than the other
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected fn pointer `for<'a, 'b, 'c> fn(&'a str, &'b S<'c>)`
+ found fn pointer `fn(_, _)`
+note: function defined here
+ --> $DIR/closure-with-wrong-borrows.rs:3:4
+ |
+LL | fn f(inner: fn(&str, &S)) {
+ | ^ -------------------
+help: consider removing the ``
+ |
+LL | f(inner);
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.