It’s because == does Peer Type Resolution (PTR), which doesn’t resolve decl literals the same way an assignment or in fact switches would. Since default is a declaration and not an actual value of the enum, PTR is currently unable to resolve it. I think it’s an inconsistency, but don’t yet know of a concrete plan to resolve this (which isn’t to say there isn’t one).
I don’t understand what is the difficulty here. If one operand is enum literal or declaration literal and the other operand is a typed value, then just use the type of typed value as the context. I don’t see any difference between handling assign a declaration literal to a typed value and handling compare a declaration literal with a typed value.