Не следует operator->
развернуть до pair
?
Рекурсия operator ->
работает только до получения типа указателя. Как только это произойдет, рекурсия останавливается, и вы получаете доступ к тому, на что указывает указатель. В этом случае std::vector::iterator::operator->
возвращает unique_ptr<pair<int, int>>*
как тип указателя элемента в векторе. Как только вы нажмете на этот указатель, у вас останется доступ к членам unique_ptr
, а не к pair<int, int>
, на который он указывает.
Вы можете получить то, что хотите, используя
(*bar.begin())->first;
, так теперь вы используете operator->
из unique_ptr<pair<int, int>>
.