Warum ist std :: array <T, 0> nicht leer?
Gegeben, keinestd::array< T, 0 >
, warum ist es nicht leer? Ich meine "leer" wie in:
std::is_empty< std::array< int, 0 > >::value
zurückkehrenfalse
und
#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;
}
Ausbeuten
4
4
8
was bedeutet, dass fürstd::array<int,0>
wird die Leerbasisoptimierung (EBO) nicht angewendet.
Dies erscheint mir angesichts dessen besonders merkwürdigstd::tuple<>
(Anmerkung: keine Vorlagenparameter)ist leer, d. h.std::is_empty<std::tuple<>>::value
gibt nachtrue
.
Frage: Warum ist das bei dieser Größe so?0
ist schon ein Sonderfall fürstd::array
? Ist es beabsichtigt oder ein Versehen in der Norm?