Skip to content

Commit 723af43

Browse files
committed
Add a rule that enum discriminants may not use generic parameters
This is implemented in the compiler with the diagnostic [`ParamInEnumDiscriminant`](https://github.com/rust-lang/rust/blob/3b1b0ef4d80d3117924d91352c8b6ca528708b3c/compiler/rustc_resolve/src/errors.rs#L651-L661) and [`NoConstantGenericsReason::IsEnumDiscriminant`](https://github.com/rust-lang/rust/blob/3b1b0ef4d80d3117924d91352c8b6ca528708b3c/compiler/rustc_resolve/src/late.rs#L160-L168).
1 parent 1d674cb commit 723af43

1 file changed

Lines changed: 19 additions & 0 deletions

File tree

src/items/enumerations.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,25 @@ enum OverflowingDiscriminantError2 {
196196
}
197197
```
198198

199+
r[items.enum.discriminant.restrictions.generics]
200+
Explicit enum discriminants may not use generic parameters from the enclosing enum.
201+
202+
> [!EXAMPLE]
203+
> ```rust,compile_fail
204+
> #[repr(u32)]
205+
> enum E<'a, T, const N: u32> {
206+
> Lifetime(&'a T) = {
207+
> let a: &'a (); // ERROR: generic parameters may not be used in enum discriminant
208+
> 1
209+
> },
210+
> Type(T) = {
211+
> let x: T; // ERROR: generic parameters may not be used in enum discriminant
212+
> 2
213+
> },
214+
> Const = N, // ERROR: generic parameters may not be used in enum discriminant
215+
> }
216+
> ```
217+
199218
### Accessing discriminant
200219
201220
#### Via `mem::discriminant`

0 commit comments

Comments
 (0)