Instead of storing the wrapped iterator inside the stride_counting_iterator,
store its base so we can have e.g. a stride_counting_iterator of an
input_iterator (which was previously impossible because input_iterators
are not copyable).
As a fly-by fix, remove the member base() functions, which are super
confusing.
This is the only place iterator_concept_t is used. Could we change this to something like
and then eliminate lines 649–689?
Alternatively, is it possible to replace the whole thing with just
or does that fail tests such as
? (This would all be much easier if ITER-CONCEPT were a real thing instead of being exposition-only.)