Repository navigation
Conversation
Let std::vector, std::set, std::map, and std::unordered_set fields use any comparator, hash, or allocator type, instead of only matching containers with the default template arguments. Previously, a field like Bitcoin Core's GCSFilter::ElementSet (std::unordered_set<Element, ByteVectorHash>) didn't match any overload, so Bitcoin Core had to copy the std::unordered_set read and build functions to pass it over IPC. This change was written with Claude Opus 5.5 (1M context).
|
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. ReviewsSee the guideline and AI policy for information on the review process. |
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.
Problem:
std::vector,std::set,std::mapandstd::unordered_setfields and parameters only work when they use the default comparator, hash and allocator types. Anything else, like Bitcoin Core'sGCSFilter::ElementSet(std::unordered_set<Element, ByteVectorHash>), fails to compile with "no matching function for call to CustomBuildField". Bitcoin Core currently works around this by copying thestd::unordered_setread and build functions into its own code (bitcoin/bitcoin#29409).Solution: Make the container overloads in
type-vector.h,type-set.h,type-map.handtype-unordered-set.htemplates over the containers' comparator, hash and allocator types. Small change to the four headers, plus aFooStructround-trip test with a descendingstd::setandstd::map, anstd::unordered_setwith a custom hash, and astd::pmr::vector.