Почему std :: array <T, 0> не пусто?

Учитывая любойstd::array< T, 0 >почему он не пустой? Я имею в виду "пустой", как в:

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

возвратеfalse а также

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

доходность

 4
 4
 8

что означает, что дляstd::array<int,0>, оптимизация пустой базы (EBO) не применяется.

Это кажется мне особенно странным, учитывая, чтоstd::tuple<> (примечание: нет параметров шаблона)является пустой, т.е.std::is_empty<std::tuple<>>::value даетtrue.

Вопрос: Почему, учитывая этот размер0 это уже особый случай дляstd::array? Это преднамеренное или недосмотр в стандарте?

Ответы на вопрос(1)

Ваш ответ на вопрос