Skip to content

Non-'static Lifetimes in Const Generics #74052

Open

Description

We currently don't correctly handle non-'static lifetimes in const generics. Until #74051 is merged we ICE when a non-'static lifetime is hit, as seen in #60814.

Many uses for const generics does not hit this limitation, but the following case has been brought up:

fn test<'a, const VALUE: std::mem::Discriminant<Enum<'a>>(v: Enum<'a>) -> bool {
     std::mem::discriminant(&v) == VALUE
}

as quoted from @lcnr on Zulip

mem::Discriminant is invariant so VALUE has to be mem::Discriminant of Enum<'a> and can't use Enum<'static>.

@varkor @eddyb @nikomatsakis

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-const-genericsArea: const generics (parameters and arguments)A-lifetimesArea: Lifetimes / regionsC-enhancementCategory: An issue proposing an enhancement or a PR with one.T-langRelevant to the language 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