Для любого 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? Является ли это преднамеренным или надзором в стандарте?