¿Por qué std :: array <T, 0> no está vacío?

Dado cualquierstd::array< T, 0 >, ¿por qué no está vacío? Me refiero a "vacío" como en:

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

regresandofalse y

 #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;
 }

rendimientos

 4
 4
 8

lo que significa que parastd::array<int,0>, la optimización de la base vacía (EBO) no se aplica.

Esto me parece especialmente extraño dado questd::tuple<> (nota: sin parámetros de plantilla)es vacío, es decir,std::is_empty<std::tuple<>>::value hace rendimientotrue.

Pregunta: ¿Por qué es eso, dado ese tamaño?0 ya es un caso especial parastd::array? ¿Es intencional o un descuido en la norma?

Respuestas a la pregunta(1)

Su respuesta a la pregunta