#[rustc_paren_sugar]
#[rustc_on_unimplemented(
on(Args="()", note="wrap the `{Self}` in a closure with no arguments: `|| {{ /* code */ }}"),
+ on(
+ all(Args="(char,)", _Self="std::string::String"),
+ note="borrowing the `{Self}` might fix the problem"
+ ),
message="expected a `{FnMut}<{Args}>` closure, found `{Self}`",
label="expected an `FnMut<{Args}>` closure, found `{Self}`",
)]
--- /dev/null
+fn main() {
+ let line = String::from("abc");
+ let pattern = String::from("bc");
+ println!("{:?}", line.find(pattern)); //~ ERROR E0277
+}
--- /dev/null
+error[E0277]: expected a `std::ops::FnMut<(char,)>` closure, found `std::string::String`
+ --> $DIR/issue-62843.rs:4:27
+ |
+LL | println!("{:?}", line.find(pattern));
+ | ^^^^ expected an `FnMut<(char,)>` closure, found `std::string::String`
+ |
+ = help: the trait `std::ops::FnMut<(char,)>` is not implemented for `std::string::String`
+ = note: borrowing the `std::string::String` might fix the problem
+ = note: required because of the requirements on the impl of `std::str::pattern::Pattern<'_>` for `std::string::String`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.