-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Open
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-trait-systemArea: Trait systemArea: Trait systemD-terseDiagnostics: An error or lint that doesn't give enough information about the problem at hand.Diagnostics: An error or lint that doesn't give enough information about the problem at hand.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Description
Given
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() {}
we currently emit
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`
It would be nice if we mentioned anywhere that BufReader<&mut T>: BufRead
is satisfied.
CC #81990
Metadata
Metadata
Assignees
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-trait-systemArea: Trait systemArea: Trait systemD-terseDiagnostics: An error or lint that doesn't give enough information about the problem at hand.Diagnostics: An error or lint that doesn't give enough information about the problem at hand.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.