This method seems a bit too simple to me, all it does is check if all values have only 1 bit set, and it doesn't check if there are duplicate values. I believe it should be possible to modify this so it uses 2 passes, the first determines which bits are valid flags, as well as making sure a flag isn't defined twice, and the second checks that values that have more than 1 bit set are actually combinations of the defined flags. This would remove the need for the additional template parameter to `Flags` in order to cover the current use-case it intends to. I can still see a use for that extra template parameter, but it would be significantly smaller than it currently is.