给定 any 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
确实 yield true
。
问题:为什么会这样,因为 size0
已经是 的特例了std::array
?是故意的还是标准的疏忽?