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.

### 3307. `std::allocator<void>().allocate(n)`

Section: 20.10.9 [default.allocator] Status: C++20 Submitter: Jonathan Wakely Opened: 2019-10-25 Last modified: 2021-02-25

Priority: 0

View all other issues in [default.allocator].

View all issues with C++20 status.

Discussion:

In C++20 the `std::allocator<void>` explicit specialization is gone, which means it uses the primary template, which has allocate and deallocate members.

Although it's implied by the use of `sizeof(T)`, `std::allocator<T>::allocate` doesn't have an explicit precondition that the value type is complete.

[2019-11 Status to 'Ready' in Monday issue prioritization in Belfast]

Proposed resolution:

This wording is relative to N4835.

1. Modify 20.10.9.2 [allocator.members] as indicated:

   >     [[nodiscard]] constexpr T* allocate(size_t n);

   > -?- Mandates: `T` is not an incomplete type (6.8 [basic.types]).

   > -2- Returns: A pointer to the initial element of an array of storage of size `n * sizeof(T)`, aligned appropriately for objects of type `T`.

   > […]