std::ostream_iterator

GCC の stdc++ の ostream_iterator には value_type が定義されてない*1。継承元の iterator には void が渡っているので value_type を参照すると void になる。なので

template 
void func(Iter iter) {
  std::iterator_traits::value_type hoge;
  ...
}

なコードに GCC の ostream_iterator を渡すとコンパイルエラーになる。

Microsoft Platform SDK for Windows Server 2003 R2 には value_type が定義されている*2

規格でどうなってるかは調べてない。

*1:bits/stream_iterator.h

*2:Include\crt\iterator