Microsoft Specific
The ordering of data declared as bit fields is from low to high bit.
END Microsoft Specific[1]
In practice, everybody does it that way.
For fields only one byte wide, this isn't an issue for major compilers. NTP has been using this for decades without problems. But for structs more than one byte wide, there are little-endian/big endian problems. Just like with the numeric types.
This is only an issue if you intend to write the bitfield to a network, file, or device. Locally, you usually don't care about the representation.
The network wire doesn't need a C++ ABI-compatible object, and clearly isn't portable when communicating between systems running different software.
For transmitting data over network, convert from local format to network format in transit.
> can only be used to save a bytes of memory
Yes, that's what "packing" is for.
"I think enums allow a bit more flexibility. For example, if you need to store a piece of data that indicates which option to set, it's easier to do with an enum (can't store the "name" of the bitfield, and you're not permitted to take its address or offset either IIRC). I also like the 'Option1 | Option2 | ... ' syntax for creating bitmasks on the fly (not sure how you'd achieve that with bitfields)"