Use VA_OPT to visit empty structs as well #32
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.
As discussed earlier @cbeck88, raising a patch here as well.
TL;DR
The current setup doesn't work with empty struct. Patched solution:
GCC godbolt: https://godbolt.org/z/44T1ndTbh
MSVC godbolt: https://godbolt.org/z/ozxfYa7PW
Full explanation:
There's a catch to VISIT_STRUCT_PP_MAP. Ideally, it should do nothing if no arguments are provided, but the build crashes for such cases. The underlying issue is:
This, in turn, causes a compilation issue for my use case. I investigated the issue, and here is the problem:
This happens as the empty field before the comma is considered an argument to the macro. ++23 introduces a solution for such cases with the reserved macro VA_OPT.
Now VISIT_STRUCT_PP_NARG() resolve to 0 in cases where no arguments are provided. I’ve included two Godbolt links comparing the original and patched versions for your reference original Godbolt vs. patched Godbolt.