The C++17 standard uses the term "allocation unit" several times in section 12.2.4 when discussing bit-fields but doesn't seem to define what the term means. The standard also states, "As a special case, an unnamed bit-field with a width of zero specifies alignment of the next bit-field at an allocation unit boundary."
So I have two questions regarding these concepts, using the code below as an example:
What does the standard mean by the term "allocation unit"?
What is the significance of the data type specified for unnamed bit-fields?
In the second question my assumption is that the data type means that the bit-field that follows should be aligned on the next boundary for that data type.
struct tag
{
char X:3;
unsigned int :0; // start next bit-field on next unsigned int boundary?
char Y:4;
unsigned char :0; // start next bit-field on next unsigned char boundary?
long Z:32;
};