This whole enum thing is making my head explode out of confusion. I thought having a tag was just supossed to be used as a namespace for enumerated values. E.g.:
enum { red = 1, green, blue } ... if (getValue() == green) { do.. } and: enum Tagged { red = 1, green, blue } ... if (getValue() == Tagged.green) { // safer version do.. } That is all that I thought enums are useful for. But apparently an enum is a type and you can instantiate it.... and I don't even know what an enum is anymore. I'll just stay out of this discussion for now, lol. :) > I agree, and I have never said I want to disallow it. You can cast those FOO, > BAR, etc implicitly to int. It's the example V2 I have shown, no error there: > > enum V1 = 10; > enum { V2 = 20 } > enum Foo { V3 } > void main() { > assert(V1 == 10); // OK > assert(V2 == 20); // OK > assert(Foo.V3 == 0); // ERROR, type mismatch > } > > Thank you for your doubts and questions, they help me express better what I > meant. It seems I was not clear enough at the beginning. > > Bye, > bearophile >