On Thu, 17 Aug 2023 at 13:50, Timur Doumler via Std-Proposals
<std-proposals@lists.isocpp.org> wrote:
std::array provides some guarantees: that the N elements of type T are contiguous, that std::array is an aggregate (with further guarantees on how you can initialise it), that it is a structural type, etc.
AFAIK it does however does *not* provide a guarantee that there is an actual array, that is, a T[N], under the hood anywhere. A hostile implementation could implement std::array<T, 2> for example as a struct { T first, second; };
No, it can't. That implementation wouldn't fulfill the requirements of
array::data(), which are that
[data(), data() + size())
is a valid range (and that range is denoted by pointer arithmetic, and
traversed by pointer arithmetic,
because data() and data()+size() are just pointers).