A very good point though! What if a "set" was nothing more than a enum whose values are shifted, rather than incremented. The type of the "set" would as big as needed for the set's values to fit: set StreamFeature { ISREADABLE, ISWRITABLE, ISSEEKABLE }; // could be identical to: enum StreamFeature { ISREADABLE = 1, ISWRITABLE = 2, ISSEEKABLE = 4 }; L.