This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++20 status.
std::allocator::allocate
sometimes returns too little storageSection: 20.2.10.2 [allocator.members] Status: C++20 Submitter: Casey Carter Opened: 2019-02-20 Last modified: 2021-02-25
Priority: 3
View all other issues in [allocator.members].
View all issues with C++20 status.
Discussion:
20.2.10.2 [allocator.members]/2 says:
-2- Returns: A pointer to the initial element of an array of storage of size
n * sizeof(T)
, aligned appropriately for objects of typeT
.
As in LWG 3038(i), we should not return too little storage for n objects of size sizeof(T)
, e.g.
when n
is SIZE_MAX / 2
and T
is short
.
[2019-03-05 Priority set to 3 after reflector discussion]
[2019 Cologne Wednesday night]
Status to Ready; will open additional issue to reconcile this and 3038(i)
Proposed resolution:
This wording is relative to N4800.
Change 20.2.10.2 [allocator.members] as indicated:
[[nodiscard]] T* allocate(size_t n);[…]
-4- Throws:bad_array_new_length
ifSIZE_MAX / sizeof(T) < n
, orbad_alloc
if the storage cannot be obtained.