Don't predeclare a struct as a class #114
Merged
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.
Holy moly this took a long time to debug.
MSVC gives absolutely zero warnings about if a struct/class is predeclared as one or the other, during compilation.
However, linking also needs to happen. And as it turns out, whether a thing is a class or struct is part of the MSVC name mangling spec. Hence, we'd end up with e.g. this function (which references
SymbolInfo
) as being defined in it's object file as the following symbol:However, things which reference
SymbolInfo
, but which may have pulled in the incorrect predeclaration prior, will reference it as an incorrect symbol:e.g. notice the difference between
PEBUSymbolInfo
andPEBVSymbolInfo
. Enqueue strange linking issues galore.