For starters, I'd expect an actual Flag object to be returned. Cast to bool is just fine if I'm in a evaluation context.

```D
E
{
    a = 0x1,
    b = 0x2,
    aOrB = a | b,
    c = 0x4,
}
auto myFlags = Flags!(E, true)(a, c);
assert(myFlags & aOrB); //fails
Flags!(E, true) myFiltered = myFlags & aOrB; //fails
```