Allocator
requirements should include CopyConstructible
Section: 16.4.4.6 [allocator.requirements] Status: C++14 Submitter: Jonathan Wakely Opened: 2011-08-30 Last modified: 2016-01-28
Priority: Not Prioritized
View other active issues in [allocator.requirements].
View all other issues in [allocator.requirements].
View all issues with C++14 status.
Discussion:
As discussed in c++std-lib-31054 and c++std-lib-31059, the Allocator
requirements implicitly require CopyConstructible
because
a.select_on_container_copy_construction()
and
container.get_allocator()
both return a copy by value, but the
requirement is not stated explicitly anywhere.
CopyConstructible
.
[2012, Kona]
Move to Ready.
[2012, Portland: applied to WP]
Proposed resolution:
This wording is relative to the FDIS.
Change Table 28 — Allocator requirements in 16.4.4.6 [allocator.requirements]:
Expression | Return type | Assertion/note pre-/post-condition | Default |
---|---|---|---|
X a1(a);
|
Shall not exit via an exception. post: a1 == a
|
||
…
|
|||
X a1(move(a));
|
Shall not exit via an exception. post: a1 equals the prior valueof a .
|
Change 16.4.4.6 [allocator.requirements] paragraph 4:
An allocator type
X
shall satisfy the requirements ofCopyConstructible
(16.4.4.2 [utility.arg.requirements]). TheX::pointer
,X::const_pointer
,X::void_pointer
, andX::const_void_pointer
types shall satisfy the requirements ofNullablePointer
(16.4.4.4 [nullablepointer.requirements]). No constructor, comparison operator, copy operation, move operation, or swap operation on these types shall exit via an exception.X::pointer
andX::const_pointer
shall also satisfy the requirements for a random access iterator (24.3 [iterator.requirements]).