Если *map_it
возвращает &
в std::pair
, как это может не сработать?
Visual Studio указывает мне на pair& operator=(const volatile pair&) = delete;
. Как это работает и какая магия перегрузки происходит здесь?
Найден при попытке реализовать хэш-таблицу. Я хочу, чтобы ключ был постоянным, а значение было изменяемым, а вся пара не была назначаемой. Взглянул на реализацию Visual Studio
, и я до сих пор не могу понять это. Я считаю, что это должно быть действительно простое правило, о котором я до сих пор ничего не знаю.
Вот пример:
#include <unordered_map>
int main() {
std::unordered_map<int, int> map;
map[1] = 2;
auto map_it = map.begin();
auto & map_pair = *map_it;
// How can they prevent this?
map_pair = std::pair<int const, int>(1, 2);
// And this one?
std::pair<int const, int> p(1, 2);
map_pair = p;
return 0;
}