On 01/26/2012 02:59 PM, Trass3r wrote:
I thought it'd be good to outsource this question from the other thread about enums as flags.Is there any merit in having implicit conversion to the basetype? Imo it only introduces a severe bug source and brings no advantages. For example it allows implicit conversion to bool. enum Bla { S1 = 1, S2, S3 } if (Bla.S2) // makes no sense at all, all Blas convert to true // and if S1 was 0, it would mean false, but it isn't meant as a special member!
That is not an implicit conversion. if(x) is equivalent to if(cast(bool)x).
A better example is something like if (b && Bla.S2) // written '&&' instead of '&' by mistake, will silently pass In general it allows operations that don't make any sense. if (Bla.S2 & Blub.S1) // works cause an int is produced // but by using named enums I made clear that Bla and Blub are totally different Heck even +,-,... work. Remember that if you do need to do such crazy stuff you can still explicitly cast to int or whatever.
I have argued for banning those operations on strong enums before, but some objected to it because they wanted to use strong enums as bit flags.
