26.01.2012 2:40, Jonathan M Davis пишет:
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

I agree, enum variable should only contain one of the enumerated values. Here's an example how current way may lead to unexpected result:

enum Foo { A = 1, B }

void bar( Foo foo ) {
    final switch( foo ) {
        case Foo.A:
            writeln( "A" );
            return;
        case Foo.B:
            writeln( "B" );
            return;
    }
    writeln( "Unreachable branch" );
}

int main() {
    bar( Foo.A | Foo.B );
    return 0;
}

It is intuitive to assume that the final switch will always hit one of it's branches, yet this doesn't work here.

Reply via email to