Skip to content

Tracking Issue for gca_macroless_items #162540

Description

@BoxyUwU

The feature gate for the issue is #![feature(gca_macroless_items)]. Using it requires #![feature(gca_min_const_items)] to be enabled as well.

Note: this tracking issue was largely copied from #159006 which was originally written by @khyperia

Background

On stable, there are two kinds of const arguments for generics at the moment:

  • "anon consts", which cannot be generic, and support arbitrary expressions. These are opaque to the type system, and are blindly handed off to CTFE to get a concrete value for.
  • min_const_generics arguments, which are plain paths to const parameters, used in e.g. array lengths (e.g. fn foo<const N: usize>(x: [u32; N]) {}). These are visible to, and reasoned about, by the type system.

The second category, things that can be reasoned about by the type system, have the (bikesheddable) name of a "directly represented" const argument. The generic_const_args family of features is about expanding and reasoning about these directly represented const arguments in various ways.

#![feature(gca_min_const_items)] extends the set of directly represented const arguments with:

  • the gca!() macro allows a significantly expanded set of expressions within it, e.g. paths to const items with a gca! RHS, paths to regular const items, struct expressions, array expressions, so on and so forth. (Informational note: each of these can be and likely will be under various feature flags, e.g. paths to gca!-rhs const items are supported under gca_min_const_items, but paths to regular const items are only supported under gca_const_items)

Finally, we come to this feature, #![feature(gca_macroless_items)]. This feature extends the set of directly represented const arguments with:

  • Anything that used to be supported within the gca!() macro as the right hand side of a const item, is now supported without the macro. Const item RHS expressions will be attempted to be lowered "directly", and if they cannot be represented directly, it will automatically fall back to being represented as a regular const item.

About tracking issues

Tracking issues are used to record the overall progress of implementation.
They are also used as hubs connecting to other relevant issues, e.g., bugs or open design questions.
A tracking issue is however not meant for large scale discussion, questions, or bug reports about a feature.
Instead, open a dedicated issue for the specific matter and add the relevant feature gate label.
Discussion comments will get marked as off-topic or deleted.
Repeated discussions on the tracking issue may lead to the tracking issue getting locked.

Steps

Unresolved Questions

Implementation history

Activity

  1. added
    T-langRelevant to the language team
    C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFC
    A-const-genericsArea: const generics (parameters and arguments)
    on Sep 9, 2026
  2. added 3 commits that reference this issue on Sep 11, 2026
  3. added a commit that references this issue on Sep 11, 2026
  4. added a commit that references this issue on Sep 11, 2026
  5. changed the title [-]Tracking Issue for macroless_const_item_generic_const_args[/-] [+]Tracking Issue for gca_macroless_items[/+] on Sep 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-const-genericsArea: const generics (parameters and arguments)C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCT-langRelevant to the language team

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions