Issue 2566: Requirements on the first template parameter of container adaptors (original) (raw)
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: 23.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, 23.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.
- Edit 23.6.1 [container.adaptors.general]/2 as indicated:
-2- The container adaptors each take a
Container
template parameter, and each constructor takes aContainer
reference argument. This container is copied into theContainer
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 parameterT
of the container adaptors shall denote the same type asContainer::value_type
.