Add TYPE_SAFE_MSC_EMPTY_BASES
to all strong_typedef
operations
#159
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.
Expands upon the PR (#128) by adding the
TYPE_SAFE_MSC_EMPTY_BASES
macro to allstrong_typedef
operations. This Fixes an issue where the order of inheritance would affect the size of the derivedstrong_typedef
, for example:In this specific configuration, the code fails to compile due to
sizeof(A)
actually evaluating to 4. However, transposing the order ofequality_comparison
andinteger_arithmetic
has the surprising result of thestatic_assert
succeeding with a class size equal to 2! I believe this rule comes down to the following statement from the Microsoft documentationThe following snippet is a more generic case which shows that my proposed patch works, as it only compiles when
__declspec(empty_bases)
is applied such that no two consecutive base classes are without the modifier.