-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix and extend key extraction for unique map/set containers #5050
Merged
Conversation
This file contains 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
frederick-vs-ja
changed the title
Fix and extend key extraction for unique map containers
Fix and extend key extraction for unique map/set containers
Oct 28, 2024
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as resolved.
This comment was marked as resolved.
StephanTLavavej
approved these changes
Oct 29, 2024
Thanks! 😸 I pushed some minor refactorings. |
I'm mirroring this to the MSVC-internal repo - please notify me if any further changes are pushed. |
Thanks for noticing and fixing this! 🦅 👁️ 🛠️ We usually changelog bugfixes as higher priority than perf improvements, but in this case |
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.
Currently, the key-extracting optimization mechanism incorrectly catches some
volatile
-qualified glvalues (due to_Remove_cvref_t
) and attempts to bind them to aconst K&
reference, which makes the program ill-formed. This PR make the mechanism never catchvolatile
glvalues, which makesvolatile
accepted under some conditions as specified by the standard.In piecewise construction, when the first
tuple
argument is a 1-tuple
, it's sometimes possible to directly treat its only tuple element as the key. Also, since C++23, it should be possible to directly get the key from suitabletuple<K, V>
andarray<K, 2>
without additional construction. This PR attempts to extend the optimization mechanism to catch these cases.The mechanism should also be usable for
flat_set
andflat_map
.Note that
subrange
is intentionally ignored because the correspondingget
function copies (or moves) the key, which doesn't seem desired.