C ++では、OutputIterator型Xが形式の式をサポートしている必要があります。r++ここで、はのrインスタンスですX。この接尾辞の増分は、意味的に次のものと同等である必要があります。
(*) { X tmp = r; ++r; return tmp; }
に変換可能な型を返す必要がありX const&ます。C ++ 11では、24.2.4を参照してください(ただし、これは新しいものではありません)。同じセクションで、それは言います
出力イテレータのアルゴリズムは、同じイテレータを2回通過しようとしないでください。それらはシングルパスアルゴリズムである必要があります。
上記の(*)が与えられた場合、次のように戻り値をコピーするとします。X a(r++);
インクリメント
rする前に参照解除可能でしたが、参照解除されなかったとします。a参照解除可能である必要がありますか?もしそうなら、そうでない場合X a(r++); *a = t;と同じ割り当てを実行する必要*r++ = t;がありますか?とに(他の)条件はaありrますか?それ以外の場合は、
rインクリメントする前に参照解除/割り当てが行われ、そのインクリメントされた値は(また)参照解除可能であると想定します。次のうちどれが(もしあれば)明確に定義されています:(a)*a = t;、(b)++a; *a = t;、(c)*r = t;?
フォローアップも参照してください:二重にインクリメントされたOutputIteratorへの間接参照-割り当て