AFAICT, Cpp17InputIterators are not required to be default constructible,
so our archetype should not be default constructible. Removing that
constructor has a ripple effect on a couple of tests that were making
incorrect assumptions. Notably:
- Some tests were using cpp17_input_iterator to form a common_range using test_common_range. That is not valid, because a cpp17_input_iterator is not a sentinel for itself after the change (it's not semiregular anymore).
- Some tests were using cpp17_input_iterator as a sentinel for itself (basically the same problem as above), which is invalid for the same reason.
- This change required modifying sentinel_wrapper so that it can work with non-default-constructible iterators like cpp17_input_iterator. Otherwise, there would be no way to test most utilities on those iterators.
Can you change this to cpp17_input_iterator<operator_hijacker*> i at the same time? I think that's what was intended here: we just need a non-forward iterator whose value_type is operator_hijacker, and the rest doesn't matter. (Honestly I don't see why it needs to be a non-forward iterator — operator_hijacker *i might do just as well — but I dunno.)
@Mordante, who I believe wrote this code originally: does that sound right to you?