Change:
This is either a regression of or it was closed prematurely. Fairly minimal reproducer: - I'm still not entirely sure what is actually wrong here - is it the lifetime as in ? Anyhow - the message doesn't refer to any T that needs to be specified, and the named explicit type is not sufficient to fix the issue even when given. Happens with nightly too.
Right, so the triggering problem here is the call - with that fixed it all falls into place, but the error message is still poor.
I got hit by this bug too and in my case the fix isn't obvious (it's a mix of an iterator and ). What did you mean by "fixing the get() call"?
It has a parameter type that is a bit bonkers given the type of the Hash, which causes the type inference of the to go off into the weeds I think; doesn't change that there is a bug - this is about the diagnostics after all. is a fixed version of the broken code.
The error message should have been fixed by , marking as .

Discussion:
<ins> // Regression test for #71732, it used to emit incorrect diagnostics, like: // error[E0283]: type annotations needed //  --> src/main.rs:5:10 //   | // 5 |         .get(&"key".into()) //   |          ^^^ cannot infer type for struct `String` //   | //   = note: cannot satisfy `String: Borrow<_>` // help: consider specifying the type argument in the method call //   | // 5 |         .get::<Q>(&"key".into()) //   | use std::collections::hash_map::HashMap; fn foo(parameters: &HashMap<String, String>) -> bool { parameters .get(&"key".into()) //~ ERROR: type annotations needed .and_then(|found: &String| Some(false)) .unwrap_or(false) } fn main() {} </ins>

<ins> error[E0283]: type annotations needed --> $DIR/issue-71732.rs:18:10 | LL |         .get(&"key".into()) |          ^^^  ------------ this method call resolves to `T` |          | |          cannot infer type for type parameter `Q` declared on the associated function `get` | = note: cannot satisfy `String: Borrow<_>` error: aborting due to previous error For more information about this error, try `rustc --explain E0283`. </ins>

<ins> // Regression test for #72616, it used to emit incorrect diagnostics, like: // error[E0283]: type annotations needed for `String` //  --> src/main.rs:8:30 //   | // 5 |         let _: String = "".to_owned().try_into().unwrap(); //   |             - consider giving this pattern a type // ... // 8 |         if String::from("a") == "a".try_into().unwrap() {} //   |                              ^^ cannot infer type for struct `String` //   | //   = note: cannot satisfy `String: PartialEq<_>` use std::convert::TryInto; pub fn main() { { let _: String = "".to_owned().try_into().unwrap(); } { if String::from("a") == "a".try_into().unwrap() {} //~^ ERROR: type annotations needed } { let _: String = match "_".try_into() { Ok(a) => a, Err(_) => "".into(), }; } } </ins>

<ins> error[E0283]: type annotations needed --> $DIR/issue-72616.rs:20:30 | LL |         if String::from("a") == "a".try_into().unwrap() {} |                              ^^ -------------- this method call resolves to `std::result::Result<T, <Self as TryInto<T>>::Error>` |                              | |                              cannot infer type | = note: cannot satisfy `String: PartialEq<_>` error: aborting due to previous error For more information about this error, try `rustc --explain E0283`. </ins>