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