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!

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.

Reply via email to