PhobosWatch: manifest => enum
Bastiaan Veelo
Bastiaan at Veelo.net
Sun Dec 30 14:10:04 PST 2007
Janice Caron wrote:
> On 12/30/07, 0ffh <frank at youknow.what.todo.internetz> wrote:
>> because to me the rule "case guards can only be of integral type"
>> seems to make the most sense. I'd be rather disappointed if case
>> one didn't work...
>
> This bit of conversation seems to have lost track of the original
> point, which, to remind all, was that Bastiaan Veelo said:
>
>> You can regard me as a newcomer. In my view, enums are often
>> used in support of switch statements. If you are loosening up
>> enums so its members can be of heterogeneous types, will you
>> be loosening up switch/case as well? If not, that would be
>> confusing to me, as you will be able to switch on some enums
>> but not on others.
>
> So, the answer is that anonymous enums don't create new types. The
> type is simply the underlying type. In the case of heterogenous
> anonymous enums, the type of each element can be different.
>
> This is a very different kettle of fish from /named/ enums, which do,
> in fact, create a new type, allowing the compiler to look at code like
>
> enum Primary { red, green, blue }
> Primary x = whatever;
> switch (x)
> {
> case Primary.red: /*...*/
> case Primary.green: /*...*/
> }
>
> and detect that case blue is missing, and hence a default is needed.
> It cannot do that for anonymous enums, because it has no way to figure
> out what the complete set should be.
>
> At least, I /think/ that's what Bastiaan was getting at.
>
> Anyway, the point is that the new extensions make no difference to switch/case.
Thank you for reminding me of the proper way of switching on enums. And
you are right of course, no difference here.
Bastiaan.
More information about the Digitalmars-d
mailing list