istringstream str("20 31 345 -50 109 8");
istream_iterator<int> first(str), second, last;

while (first != last){
cout<< *first <<endl;
++first;
}

で一応、正常に整数が出力されているようですが、
while (first != last)の条件でどうしてうまくいくのか
わかりません。Iterator last にはstrの終了情報は渡って
いないように思うのですが。