Feature request: enum init shouldn't create a new enumeration
Tommi
tommitissari at hotmail.com
Mon Oct 15 01:25:17 PDT 2012
On Sunday, 14 October 2012 at 19:40:17 UTC, Nick Sabalausky wrote:
> Yes, but it still has to be taken into account in things like
> "final switch". You can't just pretend that nothing will ever
> have that value, because by making it the init value, you've
> *made* it an actual possible value, one that just happens to
> indicate "uninitialized".
*I* know that named enum variables can have whatever values; it's
rather *you* and DMD who are pretending that enum variables can
have only those values which are specifically enumerated.
You say that final switch should take into account an enum init
value which can be used to represent an invalid value. I say that
final switch shouldn't consider that (invalid) init value any
different from all the other values that are invalid for that
specific enum type, that is: all the values that are not
speficied explicitly by the enumerations. And the way final
switch should take all those invalid values into account, is by
throwing an error when a final switch switches on a value not
specifically defined by the enumerations.
Dmd also seems blinded into thinking that the specified
enumerations are all that an enum variable can ever be, while in
reality, it's very easy to write a bug that makes an enum
variable have an invalid value. E.g:
enum MyEnum { first, second, third }
auto me = MyEnum.min;
while (me < MyEnum.max)
{
// do something
++me;
}
switch (me) // this should throw
{
case MyEnum.first: break;
case MyEnum.second: break;
case MyEnum.thrird: break;
}
More information about the Digitalmars-d
mailing list