Вы хотите удалить &
после auto
, потому что try_emplace
не возвращает ссылки:
auto [it, inserted] = stringCollection.try_emplace(pString);
В этом случае тип it
равен std::unordered_map<std::string, Info>::iterator
, что удовлетворяет LegacyForwardIterator , что подразумевает LegacyInputIterator :
it->m
эквивалентно (*it).m
; *it
возвращает std::iterator_traits<It>::reference
(где It
- тип it
).
Таким образом, тип *it
в вашем случае - std::pair<const std::string, Info>&
(ссылка), поэтому, если вы получите доступ к его члену first
, вы получите ссылку на const std::string
, как и ожидалось.