Aggregate declarations could have optional template parameters.
class C1 {}
class C2(T) {}
interface I1 {}
interface I2(T) {}
struct S1 {}
struct S2(T) {}
union U1 {}
union U2(T) {}
Similarly, parameterized enum declaration would increase language consistency.
enum E1 {}
enum E2(T) {}
enum E2(T) if (constraint) {}
enum E2(T) : T {}
enum E2(T) if (constraint) : T {}
enum E2(T) : T if (constraint) {}
Are there any existing use cases that this would improve?
Comment #3 by k.hara.pg — 2013-08-16T22:57:47Z
(In reply to comment #2)
> Are there any existing use cases that this would improve?
I don't have actual use case. I'm proposing this enhancement just for increasing language consistency.
---
Now I'm opening a compiler PR to extend DIP42 feature.
https://github.com/D-Programming-Language/dmd/pull/2467
This is necessary to support `enum bool x(T) = initializer` syntax, and looks to me it is very similar to N3651 in C++14.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3651.pdf
After #2467 is accepted, we would could make most of declarations parameterize - aggregates, functions, and variable declarations.
And, at that time enum declaration would be remained just one declaration which cannot be parameterized. That would be inconsistent.
Comment #4 by robert.schadek — 2024-12-13T18:10:17Z