Skip to content

Commit c41812e

Browse files
authored
[libcxx] applies #134819 to insert_or_assign with const key_type& (#140124)
This was missed due to using prvalues in the test case, which were picked up by the rvalue-reference overload instead.
1 parent 937446d commit c41812e

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

libcxx/include/map

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1205,7 +1205,7 @@ public:
12051205
auto [__r, __inserted] = __tree_.__emplace_hint_unique_key_args(__h.__i_, __k, __k, std::forward<_Vp>(__v));
12061206

12071207
if (!__inserted)
1208-
__r->__get_value().second = std::forward<_Vp>(__v);
1208+
__r->second = std::forward<_Vp>(__v);
12091209

12101210
return __r;
12111211
}

libcxx/test/std/containers/associative/map/map.modifiers/insert_or_assign.pass.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -140,59 +140,67 @@ int main(int, char**) {
140140
M::const_iterator it = m.find(2);
141141

142142
Moveable mv1(3, 3.0);
143-
r = m.insert_or_assign(it, 2, std::move(mv1));
143+
const int key1 = 2;
144+
r = m.insert_or_assign(it, key1, std::move(mv1));
144145
assert(m.size() == 10);
145146
assert(mv1.moved()); // was moved from
146147
assert(r->first == 2); // key
147148
assert(r->second.get() == 3); // value
148149

149150
Moveable mv2(5, 5.0);
150-
r = m.insert_or_assign(it, 3, std::move(mv2));
151+
const int key2 = 3;
152+
r = m.insert_or_assign(it, key2, std::move(mv2));
151153
assert(m.size() == 11);
152154
assert(mv2.moved()); // was moved from
153155
assert(r->first == 3); // key
154156
assert(r->second.get() == 5); // value
155157

156158
// wrong hint: begin()
157159
Moveable mv3(7, 7.0);
158-
r = m.insert_or_assign(m.begin(), 4, std::move(mv3));
160+
const int key3 = 4;
161+
r = m.insert_or_assign(m.begin(), key3, std::move(mv3));
159162
assert(m.size() == 11);
160163
assert(mv3.moved()); // was moved from
161164
assert(r->first == 4); // key
162165
assert(r->second.get() == 7); // value
163166

164167
Moveable mv4(9, 9.0);
165-
r = m.insert_or_assign(m.begin(), 5, std::move(mv4));
168+
const int key4 = 5;
169+
r = m.insert_or_assign(m.begin(), key4, std::move(mv4));
166170
assert(m.size() == 12);
167171
assert(mv4.moved()); // was moved from
168172
assert(r->first == 5); // key
169173
assert(r->second.get() == 9); // value
170174

171175
// wrong hint: end()
172176
Moveable mv5(11, 11.0);
173-
r = m.insert_or_assign(m.end(), 6, std::move(mv5));
177+
const int key5 = 6;
178+
r = m.insert_or_assign(m.end(), key5, std::move(mv5));
174179
assert(m.size() == 12);
175180
assert(mv5.moved()); // was moved from
176181
assert(r->first == 6); // key
177182
assert(r->second.get() == 11); // value
178183

179184
Moveable mv6(13, 13.0);
180-
r = m.insert_or_assign(m.end(), 7, std::move(mv6));
185+
const int key6 = 7;
186+
r = m.insert_or_assign(m.end(), key6, std::move(mv6));
181187
assert(m.size() == 13);
182188
assert(mv6.moved()); // was moved from
183189
assert(r->first == 7); // key
184190
assert(r->second.get() == 13); // value
185191

186192
// wrong hint: third element
187193
Moveable mv7(15, 15.0);
188-
r = m.insert_or_assign(std::next(m.begin(), 2), 8, std::move(mv7));
194+
const int key7 = 8;
195+
r = m.insert_or_assign(std::next(m.begin(), 2), key7, std::move(mv7));
189196
assert(m.size() == 13);
190197
assert(mv7.moved()); // was moved from
191198
assert(r->first == 8); // key
192199
assert(r->second.get() == 15); // value
193200

194201
Moveable mv8(17, 17.0);
195-
r = m.insert_or_assign(std::next(m.begin(), 2), 9, std::move(mv8));
202+
const int key8 = 9;
203+
r = m.insert_or_assign(std::next(m.begin(), 2), key8, std::move(mv8));
196204
assert(m.size() == 14);
197205
assert(mv8.moved()); // was moved from
198206
assert(r->first == 9); // key

0 commit comments

Comments
 (0)