У меня есть этот кусок кода:
auto it = my_map.lower_bound(my_key);
Следующий вывод дает мне ошибку:
static_assert(std::is_same<decltype(it), std::map<K, V>::const_iterator>::value, "Error");
И следующий, все в порядке:
static_assert(std::is_same<decltype(it), std::map<K, V>::iterator>::value, "Error");
Тогда компилятор не дает мне const_iterator
.Хорошо.Но здесь:
my_map.insert_or_assign(it, my_key, some_val);
даже при iterator
(не const_iterator
) функция работает.Но в этой ссылке в insert_or_assign
сигнатурах у меня есть только const_iterator
аргументы.Я также искал файл .h
в Visual Studio, и эта информация совпадает.Протестировано на GCC 7.2+ и Visual Studio 2015, все компилируется и запускается.
Почему компилируется?Почему insert_or_assign
принимает iterator
?