Skip to content

Tracking issue for generic const items #113521

Open
@fmease

Description

@fmease

This is a tracking issue for the experimental feature generic const items (RFC pending).
The feature gate for the issue is #![feature(generic_const_items)].

It enables generic parameters and where-clauses on free and associated const items.
See also rust-lang/lang-team#214.

About experimental features

An experimental feature is one that has not yet had an RFC. The idea is to allow implementation work to proceed to better inform an upcoming RFC. Experimental features cannot be stabilized without first having an RFC. The existence of an experimental feature does not indicate lang team consensus that the feature is desirable, only that there is a problem that is worthy of being solved and that the idea has enough merit to consider exploring. See the lang team process page for more details.

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.

Steps

Experimental results

Part of the goal of the experimental process is to identify benefits but also concerns that need to be addressed in the RFC. This section catalogues notable findings thus far.

  1. Do we want to require “where Self: 'a” bounds on GACs like we do on GATs (GATs: Decide whether to have defaults for where Self: 'a #87479)?
    Unresolved, not implemented.
  2. Should #![feature(trivial_bounds)] const _UNUSED: () = () where String: Copy; successfully compile?
    Ideally yes, not implemented.
  3. Should we forbid underscore identifiers for const items with generic parameters (e.g., const _<T>: () = ();)?
    Unresolved, not implemented.
  4. Should we imply some outlives-bounds? E.g., should the presence of &'a &'b () in const K<'a, 'b>: &'a &'b () = &&(); imply the bound 'b: 'a (similarly, const K<'a, T>: &'a T = loop {}; and T: 'a)?
    Probably yes, not implemented.

Implementation history

Footnotes

  1. Generic associated constants, i.e., associated constants with generics and/or a where clause.

Metadata

Metadata

Assignees

Labels

B-experimentalBlocker: In-tree experiment; RFC pending, not yet approved or unneeded (requires FCP to stabilize).B-unstableBlocker: Implemented in the nightly compiler and unstable.C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCF-generic_const_items`#![feature(generic_const_items)]`S-tracking-needs-to-bakeStatus: The implementation is "complete" but it needs time to bake.T-langRelevant to the language team, which will review and decide on the PR/issue.

Type

No type

Projects

Status

Fixed By

Status

Exploration

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions