Change:
: We currently emit: What is likely desired instead is to use . Seen in the wild at <!-- TRIAGEBOTSTART --<!-- TRIAGEBOTASSIGNSTART --<!-- TRIAGEBOTASSIGNDATASTARTTRIAGEBOTASSIGNDATAEND --<!-- TRIAGEBOTASSIGNEND --<!-- TRIAGEBOTEND --
claim

Discussion:
trait_ref, obligation.cause.body_id, ); <del> } else { if !have_alt_message { // Can't show anything else useful, try to find similar impls. let impl_candidates = self.find_similar_impl_candidates(trait_ref); self.report_similar_impl_candidates(impl_candidates, &mut err); } // Changing mutability doesn't make a difference to whether we have // an `Unsize` impl (Fixes ICE in #71036) if !is_unsize { self.suggest_change_mut( &obligation, &mut err, trait_ref, points_at_arg, ); } </del> <ins> } else if !have_alt_message { // Can't show anything else useful, try to find similar impls. let impl_candidates = self.find_similar_impl_candidates(trait_ref); self.report_similar_impl_candidates(impl_candidates, &mut err); } // Changing mutability doesn't make a difference to whether we have // an `Unsize` impl (Fixes ICE in #71036) if !is_unsize { self.suggest_change_mut( &obligation, &mut err, trait_ref, points_at_arg, ); </ins> } // If this error is due to `!: Trait` not implemented but `(): Trait` is

<ins> #![allow(warnings)] use std::io::{BufRead, BufReader, Read, Write}; fn issue_81421<T: Read + Write>(mut stream: T) { let initial_message = format!("Hello world"); let mut buffer: Vec<u8> = Vec::new(); let bytes_written = stream.write_all(initial_message.as_bytes()); let flush = stream.flush(); loop { let mut stream_reader = BufReader::new(&stream); //~^ ERROR the trait bound `&T: std::io::Read` is not satisfied [E0277] //~| HELP consider removing the leading `&`-reference //~| HELP consider changing this borrow's mutability stream_reader.read_until(b'n', &mut buffer).expect("Reading into buffer failed"); //~^ ERROR the method `read_until` exists for struct `BufReader<&T>`, } } fn main() {} </ins>

<ins> error[E0277]: the trait bound `&T: std::io::Read` is not satisfied --> $DIR/suggest-change-mut.rs:12:48 | LL |         let mut stream_reader = BufReader::new(&stream); |                                                ^^^^^^^ the trait `std::io::Read` is not implemented for `&T` | = note: required by `BufReader::<R>::new` help: consider removing the leading `&`-reference | LL |         let mut stream_reader = BufReader::new(stream); |                                               -- help: consider changing this borrow's mutability | LL |         let mut stream_reader = BufReader::new(&mut stream); |                                                ^^^^ error[E0599]: the method `read_until` exists for struct `BufReader<&T>`, but its trait bounds were not satisfied --> $DIR/suggest-change-mut.rs:16:23 | LL |         stream_reader.read_until(b'n', &mut buffer).expect("Reading into buffer failed"); |                       ^^^^^^^^^^ method cannot be called on `BufReader<&T>` due to unsatisfied trait bounds | ::: $SRC_DIR/std/src/io/buffered/bufreader.rs:LL:COL | LL | pub struct BufReader<R> { | ----------------------- doesn't satisfy `BufReader<&T>: BufRead` | = note: the following trait bounds were not satisfied: `&T: std::io::Read` which is required by `BufReader<&T>: BufRead` error: aborting due to 2 previous errors Some errors have detailed explanations: E0277, E0599. For more information about an error, try `rustc --explain E0277`. </ins>