Warum ist std :: array <T, 0> nicht leer?

Gegeben, keinestd::array< T, 0 >, warum ist es nicht leer? Ich meine "leer" wie in:

 std::is_empty< std::array< int, 0 > >::value

zurückkehrenfalse und

 #include <iostream>
 #include <tuple>
 #include <array>

 struct Empty {};

 int main()
 {
     std::cout << sizeof(std::tuple<int>) << std::endl;
     std::cout << sizeof(std::tuple<int,Empty>) << std::endl;
     std::cout << sizeof(std::tuple<int,std::array<int,0>>) << std::endl;
 }

Ausbeuten

 4
 4
 8

was bedeutet, dass fürstd::array<int,0>wird die Leerbasisoptimierung (EBO) nicht angewendet.

Dies erscheint mir angesichts dessen besonders merkwürdigstd::tuple<> (Anmerkung: keine Vorlagenparameter)ist leer, d. h.std::is_empty<std::tuple<>>::value gibt nachtrue.

Frage: Warum ist das bei dieser Größe so?0 ist schon ein Sonderfall fürstd::array? Ist es beabsichtigt oder ein Versehen in der Norm?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage