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.

### 3310. Replace `SIZE_MAX` with `numeric_limits<size_t>::max()`

Section: 20.4.3.3 [mem.poly.allocator.mem] Status: C++20 Submitter: Japan Opened: 2019-11-04 Last modified: 2021-02-25

Priority: 0

View all other issues in [mem.poly.allocator.mem].

View all issues with C++20 status.

Discussion:

Addresses JP 218/219

It's better to use a C++ property than C standard library macro, `SIZE_MAX`.

[2019-11 Status to Ready during Tuesday morning issue processing in Belfast.]

Proposed resolution:

This wording is relative to N4835.

1. Modify 20.4.3.3 [mem.poly.allocator.mem] as indicated:

   >     [[nodiscard]] Tp* allocate(size_t n);

   > > -1- Effects: If `SIZE_MAXnumeric_limits<size_t>::max() / sizeof(Tp) < n`, throws `length_error`. […]

   > […]

   >     template<class T>
   >       T* allocate_object(size_t n = 1);

   > > -8- Effects: Allocates memory suitable for holding an array of `n` objects of type `T`, as follows:

   > > 1. (8.1) — if `SIZE_MAXnumeric_limits<size_t>::max() / sizeof(T) < n`, throws `length_error`,

   > > 2. (8.2) — otherwise equivalent to:

   > >    >     return static_cast<T*>(allocate_bytes(n*sizeof(T), alignof(T)));