Make BijectiveMap compile on more machines by avoiding const #786
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.
When I originally wrote
BijectiveMap
, I wrote the iterator interface as a thin wrapper around the forward mapping'scbegin()
andcend()
.The iterator you get from
cbegin()
has the reference typeconst std::pair<const Key, Value> &
.To achieve some symmetry, I added an additional
const
to getconst std::pair<const K, const V> &
.Later it turned out that a
std::pair
orstd::unordered_map
with addedconst
behaves very unergonomically. When the STL gives astd::pair<const Key, Value>
it almost feels like an ugly hack to make only thefirst
immutable. Trying to add additionalconst
for symmetry only makes the assignment operator break in weird ways, and only on some systems.In practice all I want is for the iterator to return
const std::pair<Key, Value> &
, but there is no subtyping of these ugly types, so the best I can do without extremely cursed and maybe illegal casting isconst std::pair<const Key, Value> &
.