Hi Rob, Am 3. September 2025 22:44:58 MESZ schrieb Rob Landers <rob@bottled.codes>: >Hello internals, > >I would like to propose a new type of backed enum: flag. This is an >integer-backed enum that requires power-of-two values that can be combined >with the bitwise operators to be used as flags. > >In some core functions, it might look like this: > >enum JSON_FLAG: flag { > case None = 0; > case ThrowOnError = 0x1 << 1; > // etc. > case PrettyPrint = 0x01 << 4; > // etc. >} > >function json_decode(string $data, bool $assoc = false, int $depth = 512, >JSON_FLAG|int $options = JSON_FLAG::None) {} > >json_decode($data, options: JSON_FLAG::ThrowOnError | JSON_FLAG::PrettyPrint); > >Note that the goal here isn’t so much to save typing space, as it is to >provide easier discoverability through IDEs, better type safety, and better >ergonomics in the language overall. > >Attempting to use a backed value that is not a power-of-two would result in a >compilation error. Bitwise operations are performed as though they’re >performed on a regular integer. > >What do you think?
I think what we actually would need is an EnumSet which can be used with any enum but (based on its ordinal) but this would play nicely together with generics `new EnumSet<JsonOption>`. > >I couldn’t find any similar proposals (listed on the RFC page) before >proposing this on the list, so if you’re working on this, please speak up; I’d >like to join forces. > >— Rob Marc