Skip to content

Trait bound From<fn()> is not satisfied even with a correct value #142513

Open
@ultimaweapon

Description

@ultimaweapon

I tried this code:

fn main() {
    UnsafeValue::from(foo);
}

fn foo(_: &Context) -> Result<(), Box<dyn core::error::Error>> {
    Ok(())
}

struct UnsafeValue;

impl From<fn(&Context) -> Result<(), Box<dyn core::error::Error>>> for UnsafeValue {
    fn from(_: fn(&Context) -> Result<(), Box<dyn core::error::Error>>) -> Self {
        Self
    }
}

struct Context {}

I expected to see this happen: The code compile.

Instead, this happened:

error[E0277]: the trait bound `UnsafeValue: From<for<'a> fn(&'a Context) -> Result<(), Box<(dyn std::error::Error + 'static)>> {foo}>` is not satisfied
 --> src/main.rs:2:5
  |
2 |     UnsafeValue::from(foo);
  |     ^^^^^^^^^^^ the trait `From<for<'a> fn(&'a Context) -> Result<(), Box<(dyn std::error::Error + 'static)>> {foo}>` is not implemented for `UnsafeValue`
  |
  = help: the trait `From<for<'a> fn(&'a Context) -> Result<_, _> {foo}>` is not implemented for `UnsafeValue`
          but trait `From<for<'a> fn(&'a Context) -> Result<_, _>>` is implemented for it
  = help: for that trait implementation, expected `for<'a> fn(&'a Context) -> Result<(), Box<(dyn std::error::Error + 'static)>>`, found `for<'a> fn(&'a Context) -> Result<(), Box<(dyn std::error::Error + 'static)>> {foo}`

For more information about this error, try `rustc --explain E0277`.
error: could not compile `rustbug` (bin "rustbug") due to 1 previous error

Meta

rustc --version --verbose:

rustc 1.87.0 (17067e9ac 2025-05-09)
binary: rustc
commit-hash: 17067e9ac6d7ecb70e50f92c1944e545188d2359
commit-date: 2025-05-09
host: x86_64-unknown-linux-gnu
release: 1.87.0
LLVM version: 20.1.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsC-bugCategory: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions