Some cons:
- You're polluting namespaces with constants
- You can only express boolean conditions without calculating them
- Every data structure has to have a slot for all possible conditions
- Any code that deals with conditions has to know about all possible conditions
- You're separating the meaning of a thing from the description of the thing
- You're requiring *more* syntax, and it's punctuation
- You're dictating the implementation of future potential data structures
They're a tool, like everything else, and have their uses in certain circumstances.