This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

### 3723. `priority_queue::push_range` needs to `append_range`

Section: 24.6.7.4 [priqueue.members] Status: New Submitter: Casey Carter Opened: 2022-06-20 Last modified: 2022-07-08

Priority: 2

View all issues with New status.

Discussion:

The `push_range` members of the `queue` (24.6.6.4 [queue.mod]) and `stack` (24.6.8.5 [stack.mod]) container adaptors are both specified as "Effects: Equivalent to `c.append_range(std::forward<R>(rg))` if that is a valid expression, otherwise `ranges::copy(rg, back_inserter(c))`.". For `priority_queue`, however, we have instead (24.6.7.4 [priqueue.members]):

> -3- Effects: Insert all elements of `rg` in `c`.

> -4- Postconditions: `is_heap(c.begin(), c.end(), comp)` is `true`.

Since `append_range` isn't one of the operations required of the underlying container, "Insert all elements of `rg`" must be implemented via potentially less efficient means. It would be nice if this `push_back` could take advantage of `append_range` when it's available just as do the other two overloads.

[2022-07-08; Reflector poll]

Set priority to 2 after reflector poll.

Proposed resolution:

This wording is relative to N4910.

1. Modify 24.6.7.4 [priqueue.members] as indicated:

   >     template<container-compatible-range<T> R>
   >       void push_range(R&& rg);

   > > -3- Effects: Inserts all elements of `rg` in `c` via `c.append_range(std::forward<R>(rg))` if that is a valid expression, or `ranges::copy(rg, back_inserter(c))` otherwise. Then restores the heap property as if by `make_heap(c.begin(), c.end(), comp)`.

   > > -4- Postconditions: `is_heap(c.begin(), c.end(), comp)` is `true`.