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

### 2566. Requirements on the first template parameter of container adaptors

Section: 22.6 [container.adaptors] Status: C++17 Submitter: Tim Song Opened: 2015-12-08 Last modified: 2017-07-30

Priority: 0

View all other issues in [container.adaptors].

View all issues with C++17 status.

Discussion:

As noted in this StackOverflow question, 22.6 [container.adaptors] doesn't seem to place any requirement on the first template parameter (`T`) of `stack`, `queue`, and `priority_queue`: the only use of `T` is in the default template argument (which need not be used) for the second template parameter (`Container`), while all of the operations of the adaptors are defined using `Container`'s member typedefs.

This permits confusing and arguably nonsensical types like `queue<double, deque<std::string>>` or `priority_queue<std::nothrow_t, vector<int>>`, which presumably wasn't intended.

[2016-02, Issues Telecon]

P0; move to Tentatively Ready.

Proposed resolution:

This wording is relative to N4567.

1. Edit 22.6.1 [container.adaptors.general]/2 as indicated:

   > -2- The container adaptors each take a `Container` template parameter, and each constructor takes a `Container` reference argument. This container is copied into the `Container` member of each adaptor. If the container takes an allocator, then a compatible allocator may be passed in to the adaptor's constructor. Otherwise, normal copy or move construction is used for the container argument. The first template parameter `T` of the container adaptors shall denote the same type as `Container::value_type`.