Skip to content

Add more information to E0599 for small changes that would make the trait bounds be satisfied #82086

Open
@estebank

Description

@estebank

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

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsA-trait-systemArea: Trait systemD-terseDiagnostics: 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.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions