Почему 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
? Это преднамеренное или недосмотр в стандарте?