Skip to content

Const closure weirdness #55272

Closed
Closed
@DutchGhost

Description

@DutchGhost

The following compiles just fine:

#![feature(impl_trait_in_bindings)]
fn main() {
    let func: impl Fn(&str) -> usize = |s| s.parse().unwrap();

}

However this does not:

#![feature(impl_trait_in_bindings)]

fn main() {
    const func: impl Fn(&str) -> usize = |s| s.parse().unwrap();
}

It gives the following error message:

error: non-defining existential type use in defining scope
 --> src/main.rs:4:42
  |
4 |     const func: impl Fn(&str) -> usize = |s| s.parse().unwrap();
  |                                          ^^^^^^^^^^^^^^^^^^^^^^ lifetime `` is part of concrete type but not used in parameter list of existential type

error: aborting due to previous error

error: Could not compile `playground`.

Why is this an error? The closure does not capture anything, so it's lifetime is 'static, and const requires 'static.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-closuresArea: Closures (`|…| { … }`)A-const-evalArea: Constant evaluation, covers all const contexts (static, const fn, ...)A-lifetimesArea: Lifetimes / regionsF-impl_trait_in_bindings`#![feature(impl_trait_in_bindings)]`

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions