ByteString
: Adjust bitfields for MSVC
#1446
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Microsoft Visual C++ compiler has more restrictions than usual about bit fields. There are two restrictions that particularly break
ByteString
:Because of this, we can't use the enumeration type inside of the bitfield. Actually though, this is mostly OK: the header struct is the only one that actually needs a typed enum, and nothing follows it in the header struct.
Therefore, this workaround should make all of GCC, Clang and MSVC happy.
Also: fixes the
#pragma pack
directives, which are typo'd slightly.P.S.: Yes, it must be
std::uint8_t
and notuint8_t
. It turns out MSVC actually ensures the typedefs are namespaced-only, if you include<cstdint>
. This is correct AFAIK, although I've never seen behavior like that out of any of the other implementations. Dunno why this doesn't apply tosize_t
, too.Related issue: #768