CWG Issue 2470 (original) (raw)

This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 117a. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2025-04-13


2470. Multiple array objects providing storage for one object

Section: 6.7.2 [intro.object]Status: CD6Submitter: Andrey ErokhinDate: 2021-01-29

According to 6.7.2 [intro.object] paragraph 3,

If a complete object is created (7.6.2.8 [expr.new]) in storage associated with another object e of type “array of N unsigned char” or of type “array of N std::byte” (17.2.1 [cstddef.syn]), that array provides storage for the created object if:

The intent of the third bullet is to select a unique array object among those satisfying the first two bullets. However, it is possible to have multiple array objects of the same size satisfying the first two bullets. For example:

unsigned char buffer[8]; struct OhNo { std::byte data[8]; }; static_assert(sizeof(OhNo) == 8 && sizeof(int) == 4); OhNo *p = new (buffer) OhNo; // buffer provides storage for OhNo int *q = new (p->data) int; // who provides storage for this? int *r = new (buffer + 4) int; // who provides storage for this?

Suggested resolution:

Change 6.7.2 [intro.object] bullet 3.3 as follows:

Proposed resolution (February, 2021):

Change 6.7.2 [intro.object] bullet 3.3 as follows: