@kikairoya istream_iterator はペア表現でも良いのでは? ostream_iterator を引き合いに出すなら分かりますけれど #boostjp
2011-11-05 15:54:37@kikairoya ある iterator が終端であるかどうかが分かれば良いのでは? それを singular iterator との equality comparison という syntax で表現するのは自然かどうかはともかく,明確な欠点があります? #boostjp
2011-11-05 15:57:49@Cryolite ...istream_iteratorはdereferenceに予期しない停止時間がある可能性があって、しかもあるイテレータが終端と一致しているかどうかは内部でdereference(というかread)しないと判別できないのでダメです
2011-11-05 15:59:59@kikairoya 「.istream_iteratorはdereferenceに予期しない停止時間がある可能性があって」とはどういう意味ですか?
2011-11-05 16:04:34@kikairoya それは分かりますけれど,それと論旨とどういう関係があるのかイマイチ理解できないのでもう少し説明を.
2011-11-05 16:25:14@Cryolite takenだったかの実装で、停止を判断する順序の問題で1個余計に入力を消費してしまう問題があってですね
2011-11-05 16:27:11@Cryolite いや入力を余計に消費すること自体が問題ですよね、istream_iteratorはsingle-passなので特に
2011-11-05 16:31:47@kikairoya ああ,はい.思い出しました.それ single-pass でできるから別に良いのでは?
2011-11-05 16:34:53@kikairoya どこを問題にしていますか? taken の内部実装の話ですか? それとも, taken に与えた istream_iterator とそれ以外の istream_iterator との競合の話ですか?
2011-11-05 16:37:02@Cryolite イテレータペアによる実装では余計に1文字読む問題が解決できないことと、istream_iteratorの元になったistreamの状態が予期しない状態になってしまうことが問題です
2011-11-05 16:38:43@kikairoya 「イテレータペアによる実装」というのは, istream の入力範囲を istream_iterator のペアで表現した range で表現することを指しているのか, taken が iterator のペアを取ることを指しているのか,どっちですか?
2011-11-05 16:44:32@kikairoya つまり taken 云々は関係なく,要するに std::istream_iterator がダメということですか?
2011-11-05 17:11:20@Cryolite istream_iteratorがダメなのと、連子がそのようなダメなイテレータを考慮していないこと両方が問題だと思います
2011-11-05 17:12:21@kikairoya たとえば taken というアダプタから base となっている istream_iterator を取り出せば,依然として predictable な single-pass iterator のオブジェクトとして扱えるように実装可能なのではないですか?
2011-11-05 17:16:30@Cryolite 取り出すとは? istream_rangeを受け取れるアダプタすべてに何らかの特殊化を行うというのは現実的ではないですよね
2011-11-05 17:19:45@kikairoya いや,例えば標準ライブラリに定義されている iterator を取る iterator adapter は base という名前のメンバ関数を持っていますよね?
2011-11-05 17:21:29@Cryolite 終端判定はどうするんです? 終端判定に副作用が存在することが第一の問題で、istream_iteratorはそうでない実装は不可能だと思いますが
2011-11-05 17:23:21