https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87982

--- Comment #5 from Jan van Dijk <j.v.dijk at tue dot nl> ---
Thanks a lot for this change.

One more nit: the standard clause 28.6.7(2) allows (== does not forbid)
negative count arguments, in which case generate_n is a no-op returning
__first, but this is not reflected by the libstdc++ documentation of the return
value, which claims  __first+__n unconditionally.

Somewhat off-topic: IMHO the standard is not explicit about the fact that gen()
is (of course) to be invoked separately for every element in the range:
"The generate_n algorithms invoke the function object gen and assign the return
value of gen through all the iterators in the range...". But that may be me not
being a native English speaker. The libstdc++ docs are more helpful for sure.

And indeed, sorry for not being sufficiently precise: the standard does not say
to *which* integral type the conversion must be possible so that type could be
used internally, or better: simply used in the interface. Having the _Size
template argument allows, in principle, the loop to be written without the
conversion being actually done, but that would be such a pico-optimization that
I still do not understand why the standard did not just fix the count type to
(e.g.) std::ptrdiff_t --- but also that is outside the scope of this issue.

Reply via email to