An idea (Re: Implicit enum conversions are a stupid PITA)

Simen kjaeraas simen.kjaras at gmail.com
Thu Mar 25 01:44:55 PDT 2010


Don <nospam at nospam.com> wrote:

> I think there might be some low-hanging fruit, though.
> Supposed we distinguished enums containing AssignExpressions from those  
> which do not.
> It seems clear to me that logical operations should always be permitted  
> on enums where every member of the enum has been explicitly assigned a  
> value.
> enum Enum1 { A = 1, B = 2, C = 4 }
>   ---> A|B makes sense.
>
> But if there are no assign expressions at all:
> enum Enum2 { A, B, C }
> then I think that performing arithmetic on that enum is almost certainly  
> a bug.

I wonder, what if the default base type of an enum was simply 'enum', a
type not implicitly convertible to other types. If you want implicit
casts, specify the base type:

enum foo { A, B, C = B } // No base type, no conversions allowed.
enum bar : int { D, E, F = E } // An int in disguise. Allow conversions.

That seems to follow D's tenet that the unsafe should be more verbose.

-- 
Simen



More information about the Digitalmars-d mailing list