Warum wurde-pair-Bereich Zugriff entfernt von C++11?

Ich habe gerade entdeckt, dass an einer Stelle, die C++11-Entwurf hatte std::begin/std::end überladungen für std::pair erlaubt, dass die Behandlung von einem paar von Iteratoren als Bereich geeignet für den Einsatz in einem range-basierte for-Schleife (N3126, Abschnitt 20.3.5.5), aber das hat sich inzwischen entfernt.

Weiß jemand, warum es entfernt wurde?

Finde ich die Entfernung sehr schade, denn es scheint, dass es keinen anderen Weg, um zu behandeln, ein paar von Iteratoren, die als eine Reihe. In der Tat:

  • Die lookup-Regeln für das beginnen/enden in einem range-basierte for-Schleife sagen, dass begin/end-gesucht-in-1) als member-Funktionen der "range" - Objekt 2) als freie Funktionen in den "zugehörigen namespaces"
  • std::pair keine begin/end-member-Funktionen
  • Die nur im Zusammenhang namespace für std::pair<T, U> im Allgemeinen namespace std
  • Wir dürfen nicht zu überlasten std::begin/std::end für std::pair uns
  • Können wir spezialisieren std::begin/std::end für std::pair (weil die Spezialisierung hätte teilweise und das ist nicht zulässig, Funktionen)

Gibt es eine andere Möglichkeit, die ich bin fehlt?

  • Nicht begin(), end() für ein std::pair die gleiche Sache wie .ersten und .zweite?
  • Ja, aber, es zu benutzen in eine range-basierte for-Schleife, die wir brauchen, begin() und end().
  • Wahrscheinlich, weil der Semantik (ein paar nicht necessarilty Bereich) und Unklarheiten zu vermeiden, wie z.B. hier berichtet: stackoverflow.com/questions/4155450/...
Schreibe einen Kommentar