C ++ - Standardwortlaut: Bedeutet "durch alle Iteratoren im Bereich" Sequentialität?

Diese SO Frage löste eine Diskussion überstd::generate und die Garantien der Norm. Insbesondere können Sie Funktionsobjekte mit internem Zustand verwenden und sich darauf verlassengenerate(it1, it2, gen) anrufengen(), speichern Sie das Ergebnis in*it, Anrufgen() wieder speichern in*(it + 1) usw., oder kann es zum Beispiel von hinten beginnen?

In der Norm (n3337, §25.3.7 / 1) heißt es:

Effekte: Der erste Algorithmus ruft das Funktionsobjekt aufgen und weist den Rückgabewert von gen über alle Iteratoren im Bereich zu[first,last). Der zweite Algorithmus ruft das Funktionsobjekt gen auf und weist den Rückgabewert von gen über alle Iteratoren im Bereich zu[first,first + n) obn ist positiv, sonst macht es nichts.

Es scheint, als sei keine Reihenfolge garantiert, zumal andere Absätze beispielsweise eine stärkere Formulierung habenstd::for_each (Effekte: Giltf auf das Ergebnis der Dereferenzierung jedes Iterators im Bereich[first,last), beginnend mit zuerst und weiter mitlast - 1. Wenn wir das wörtlich nehmen, ist es nur ein Garant für den Anfangfirst und ende umlast allerdings - keine garantie für die bestellung zwischendurch).

Aber: BeideMicrosoft undApache's C ++ Standard Bibliothek Beide geben auf ihren Dokumentationsseiten Beispiele an, bei denen die Auswertung nacheinander erfolgen muss. Und sowohl libc ++ (inalgorithm) und libstdc ++ (inbits/stl_algo.h) setzen Sie es so um. Darüber hinaus verlieren Sie eine Menge potenzieller Anwendungen fürgenerate ohne diese Garantie.

Bedeutet der derzeitige Wortlaut, dass die Reihenfolge eingehalten wird? Wenn nicht, war dies ein Versehen durch die Mitglieder des Ausschusses oder beabsichtigt?

(Mir ist klar, dass es nicht viele Menschen gibt, die aufschlussreiche Antworten auf diese Frage geben können, ohne nur zu spekulieren oder zu diskutieren. Meiner bescheidenen Meinung nach macht dies diese Frage jedoch nicht nach SO-Richtlinien „konstruktiv“.)

Vielen Dank an @juanchopanza, der auf dieses Problem aufmerksam gemacht und mich auf den Absatz über verwiesen hatfor_each.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage