On Wed, 26 May 2021, Tim Song wrote: > I noticed that output_iterator_wrapper still has a (non-void) > value_type. Perhaps we can get better coverage if it doesn't have one? > The existing tests should have caught this case with that change, at least.
Good point, and I guess it should be fine to make its pointer and reference void as well. I'm testing: --- a/libstdc++-v3/testsuite/util/testsuite_iterators.h +++ b/libstdc++-v3/testsuite/util/testsuite_iterators.h @@ -122,7 +122,7 @@ namespace __gnu_test */ template<class T> struct output_iterator_wrapper - : public std::iterator<std::output_iterator_tag, T, std::ptrdiff_t, T*, T&> + : public std::iterator<std::output_iterator_tag, void, std::ptrdiff_t, void, void> { protected: output_iterator_wrapper() : ptr(0), SharedInfo(0) > > On Wed, May 26, 2021 at 12:00 PM Patrick Palka via Libstdc++ > <libstd...@gcc.gnu.org> wrote: > > > > - else if constexpr (input_iterator<_Out> > > - && same_as<iter_value_t<_Iter>, > > iter_value_t<_Out>>) > > + else if constexpr (requires { requires (input_iterator<_Out> > > + && > > same_as<iter_value_t<_Iter>, > > + > > iter_value_t<_Out>>); }) > > It's arguably cleaner to extract this into a concept which can then > also be used in the constraint. Sounds good, though I'm not sure what name to give to this relatively ad-hoc set of requirements. Any suggestions? :)