Ich habe gerade entdeckt, dass der C++11-Entwurf an einer Stelle std::begin
/ std::end
Überlastungen für std::pair
die es erlaubte, ein Paar von Iteratoren als einen Bereich zu behandeln, der für die Verwendung in einer bereichsbasierten for-Schleife geeignet ist (N3126, Abschnitt 20.3.5.5), aber dies wurde inzwischen entfernt.
Weiß jemand, warum sie entfernt wurde?
Ich finde die Entfernung sehr bedauerlich, denn es scheint keine andere Möglichkeit zu geben, ein Paar von Iteratoren als einen Bereich zu behandeln. In der Tat:
- Die Suchregeln für Anfang/Ende in einer bereichsbasierten for-Schleife besagen, dass Anfang/Ende 1) als Mitgliedsfunktionen des Bereichsobjekts und 2) als freie Funktionen in "verbundenen Namensräumen" gesucht werden.
std::pair
hat keine Beginn/Ende-Mitgliedsfunktionen- Der einzige zugehörige Namespace für
std::pair<T, U>
ist im Allgemeinen der Namespace std - Wir dürfen nicht überlasten
std::begin
/std::end
fürstd::pair
uns selbst - Wir können uns nicht spezialisieren
std::begin
/std::end
fürstd::pair
(weil die Spezialisierung partiell sein müsste und das ist bei Funktionen nicht erlaubt)
Gibt es eine andere Möglichkeit, die ich übersehen habe?