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.
This change updates the
BestReflect()
tagging API to not require the tap operator (->*
) or calls tobest::vals<>
to manually hoist arguments into the type system.Instead, we observe that all of the requisite information for building a type descriptor with tags is already present at
constexpr
time, and therefore can all be hoisted into atemplate <const auto&>
. If we add an extra reification step, we can record field keys (e.g. ptrs-to-member) as data members in the mirror object returned byBestReflect()
, put the mirror object into aconstexpr
variable, then pass that to the function that constructs the complete type descriptor as a non-type template argument.Additionally, this change adds:
best::abridge<T>
, a symbol abridgement helper.best::mirror::with(tags)
, for adding tags directly to the reflected type, not one of its fields.