The Standard does not require that type 'size_type' is defined for
an iterator (through its traits), it requires 'difference_type',
however (along with 'value_type' and 'iterator_category').
Mingw or cygwin never appeared to me to be especially standard
compliant, they seem to usually contain the compiler or the
library that is simply too old. Just an impression I get.
I don't know. Before I'd comment, I'd want to know what he
means by "uses size_type for input iterator". The version of
CygWin I have installed here (which isn't the very latest---I
don't use it often enough to bother keeping it up to date) have
g++ 3.3.3, and in std::iterator, it defines difference_type, and
not size_type. The class std::input_iterator_tag doesn't define
any types (which is normal), and there's no other "input
iterator" class that I can think of to which he might be
referring.
And of course, difference_type doesn't have any real meaning for
input and output iterators. You can't obtain a difference at
all for output iterators, and the only way to obtain one for an
input iterator is by incrementing a copy, after which, the
original iterator isn't usable, or doesn't point to where it
originally did.