On Thursday, January 26, 2012 01:17:51 Trass3r wrote: > > I think that it makes sense to use enums as flags, but I do _not_ think > > that it makes sense to use an enum as the type of the variable _holding_ > > the flags. > > > > STC var = STC.A & STC.B; > > We could easily introduce @flags enum or whatever to make it more clear > like in C#. > > > just makes it worse. It should be something like > > > > uint var = STC.A & FOO.F; > > To me it doesn't make any sense at all to allow bitwise operations on > different *named* enums. > I also don't see why you would really need implicit conversion to the base > type. > > > For instance, std.socket uses flag enums, which is fine, but in some > > places it uses them as the type of function parameters, which is _not_ a > > good idea IMHO. > > You really think int is any better?? > No type safety at all.
What type safety? You're dealing with a uint (or ushort or ulong) with a bunch of specific bits set which represent flags. What other type would you want? You could typedef it I suppose (well, use the TypeDef library type when it's merged in anyway), but you're dealing with a fixed number of bits, which is exactly what an unsigned integer is. It's just a question of which are on and which are off. That's certainly not what _enum_ is for. It's a fixed set of values. And that's my beef with using it as the result of &ing flags. The result isn't one of those flags, so it has no business being an enum. - Jonathan M Davis