HI, Joseph, Thanks for detailed explanation. Cheers, Bingfeng
On Thu, Oct 26, 2017 at 5:11 PM, Joseph Myers <jos...@codesourcery.com> wrote: > There is a line of C90 DRs and associated textual history (compare the > relevant text in C90 and C99, or see my comparison of it in WG14 reflector > message 11100 (18 Apr 2006)) to the effect of bit-fields acting like they > have a type with the given number of bits; that line is what's followed by > GCC for C. The choice of type for a bit-field (possibly separate from > declared type) was left explicitly implementation-defined after DR#315; > that is, if an implementation allows implementation-defined declared types > as permitted by C99 and later, whether the actual type of the bit-field in > question is the declared type or has the specified number of bits is also > implementation-defined. The point in DR#120 regarding assignment to > bit-fields still applies in C11: nothing other than the semantics of > conversion to a type with the given number of bits defines how the value > to be stored in a bit-field is computed if the stored value is not in > range. > > C++ chose a different route from those C90 DRs, of the width explicitly > not being part of the type of the bit-field. I don't know what if > anything in C++ explicitly resolves the C90 DR#120 issue and defines the > results of storing not-exactly-representable values in a bit-field. > > -- > Joseph S. Myers > jos...@codesourcery.com >