Consider the code below:
#include
struct T
{
T() = delete;
};
int main()
{
std::array a;
a.size();
}
<
Thanks to @T.C., as pointed out in his comment, it's addressed in LWG 2157, which is still an open issue as of this writing.
The proposed resolution adds this bullet point (emphasis mine):
The unspecified internal structure of array for this case shall allow initializations like:
arraya = { }; and said initializations must be valid even when T is not default-constructible.
So it's clear that the intended behavior is to have std::array default constructible even when T is not.