This means you will be able to build a `Flags` from any arbitrary run-time slice of E. I don't think that's correct (and should `const(E)[]` anyways): If you support slices, then why not ranges too, while we're at it?

If you really have a need for that, an algorithm based solution with reduce is just as efficient, and explicit.

I get you want this for `Flags(val1, val2)`. I think a vararg solution would be a better fit:

```D
private alias isBaseEnumType(T) = is(E == T);

this(T...)(T flags)
if (allSatisfy!(isBaseEnumType, T))
{
    foreach(E flag; flags) {
        mValue |= flag;
}
```
This way, you can keep the base behavior you wanted, without introducing weird semantics.