Skip to content

Confusing error message when using min_specialization with dyn Trait #130102

Open

Description

I tried this code:

#![feature(min_specialization)]
pub trait Foo {
    fn foo(&self);
}

impl<T> Foo for T {
    default fn foo(&self) {}
}

impl Foo for Box<dyn Foo> {
    fn foo(&self) {}
}

This failed to compile with

error: cannot specialize on `'static` lifetime
  --> src/lib.rs:15:1
   |
15 | impl Foo for Box<dyn Foo> {
   | ^^^^^^^^^^^^^^^^^^^^^^^^^

This seems weird since there isn't a visible lifetime anywhere. The error should explain that the 'static lifetime is implicit on dyn Foo and suggest adding a lifetime parameter.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-specializationArea: Trait impl specializationArea: Trait impl specializationF-min_specialization`#![feature(min_specialization)]``#![feature(min_specialization)]`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.requires-nightlyThis issue requires a nightly compiler in some way.This issue requires a nightly compiler in some way.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions