Until C++11 bit fields with integral types should have explicit signedness only. It is implementation specific whether an -typed bit field is signed, so there could be unexpected sign extension or overflow. This means that if depending on the compiler int32_t is not explicitly defined as signed the UnitSignature structure may not work as expected. Since C++14 this has changed and an int of a bit-field is always signed: https://stackoverflow.com/questions/33723631/signed-bit-field-in-c14