deed:
> And using enum Rank { two, three, four, ... , K, A } is not 
> elegant.
But it's strongly typed, so it's safere. It's my preferred 
solution for a problem like this.
> I'd like to be able to call foo(Rank rank) with foo(3) and 
> foo(Q).
Then use module level compile-time constant...
Bye,
bearophile