Skip to content

Inappropriate inferred trait bounds when format var name overlaps with field name #345

@dtolnay

Description

@dtolnay

This code expands very sensibly to impl<T: Display> Display for Error<T>:

#[derive(Error, Debug)]
#[error("{thing}")]
pub struct Error<T> {
    thing: T,
}

This one expands to impl<T> Display for Error<T> with no inferred bound on T:

#[derive(Error, Debug)]
#[error("{var}", var = "...")]
pub struct Error<T> {
    thing: T,
}

But this one does not make sense. It expands to impl<T: Display> Display for Error<T> even though self.thing is not used in the error message and T does not need to be bound with Display.

#[derive(Error, Debug)]
#[error("{thing}", thing = "...")]
pub struct Error<T> {
    thing: T,
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions