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

            Bug ID: 111053
           Summary: std::ranges::copy is missing important optimizations
           Product: gcc
           Version: 13.1.1
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
            Blocks: 111052
  Target Milestone: ---

std::copy is overloaded for a few special cases, like deque iterators and
ostreambuf_iterators. std::ranges::copy is missing these optimizations.

    __copy_or_move(_Iter __first, _Sent __last, _Out __result)
    {
      // TODO: implement more specializations to be at least on par with
      // std::copy/std::move.

We should optimize copying a range to an ostreambuf_iterator, as we do for
std::copy.

We should optimize copying to/from a deque, by working on a whole page at a
time.

As mentioned in Bug 111052 comment 1 we could optimize copying a range to
back_insert_iterator<C> by calling C::insert to insert the whole range at once
(this might need ranges::to <https://wg21.link/P1206R7> support first, so it
isn't limited to Cpp17Iterators). Similarly for insert iterators.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111052
[Bug 111052] std::format_to(std::back_inserter(str), "") should write directly
to the string

Reply via email to