Я только что обнаружил, что в какой-то момент проект С++ 11 имел std::begin
/std::end
перегрузки для std::pair
, что позволяло обрабатывать пару итераторов как диапазон, подходящий для использования в цикле на основе диапазона (N3126, раздел 20.3.5.5), но с тех пор оно было удалено.
Кто-нибудь знает, почему он был удален?
Я считаю удаление очень неудачным, потому что, похоже, нет другого способа рассматривать пару итераторов как диапазон. Действительно:
- Правила поиска для начала/конца в цикле, основанной на диапазоне, говорят, что начало/конец рассматриваются в 1) как функции-члены объекта диапазона 2) как свободные функции в "связанных пространствах имен"
-
std::pair
не имеет функций начала/конца элемента - Единственным связанным пространством имен для
std::pair<T, U>
в общем случае является пространство имен std - Нам не разрешено перегружать
std::begin
/std::end
дляstd::pair
самих - Мы не можем специализировать
std::begin
/std::end
дляstd::pair
(потому что специализация должна быть частичной и не допускаться для функций)
Есть ли другой способ, который мне не хватает?