[struct_pack] fix c++17 enable_if missing ::type and wrong std::string_view type in user_defined_serialization_imp#1163
Merged
poor-circle merged 1 commit intoalibaba:mainfrom Apr 3, 2026
Conversation
…g_view type in user_defined_serialization_imp
b8a42b6 to
2f2b48a
Compare
|
for detail, goto summary download Artifacts |
|
for detail, goto summary download Artifacts |
Collaborator
|
LGTM |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Why
Issue 1: In the C++17 fallback path, sp_get_needed_size is incorrectly checked as returning std::string_view, while the C++20 version clearly requires it to return std::size_t. The type is completely wrong.
Issue 2: In std::void_tstd::enable_if, std::enable_if itself is a valid type (it just doesn’t have a ::type member), so std::void_t will never fail on it. This makes the condition check completely ineffective.
The correct form should be std::enable_if_t or typename std::enable_if::type, so that when condition == false it actually triggers a SFINAE substitution failure.
What is changing
Example