<initializer_list>是否包含在<iostream>中?

Is <initializer_list> included in <iostream>?

我知道下面的代码块可以编译

#include<initializer_list>
int main()
{
    std::initializer_list<int> li = {1,2,3,4};
}

我不明白为什么这也能编译

#include<iostream>
int main()
{
    std::initializer_list<int> li = {1,2,3,4};
}

<initializer_list>是否包含在<iostream>中?根据this,好像不是。这可能是 machine/compiler 依赖的东西吗?

Is <initializer_list> included in <iostream>?

没有指定也没有保证。

而且,也不能保证不收录。任何标准 header 可能包含任何其他标准 header 或系统 header。你不应该依赖这样的传递包含,因为另一个(版本的)标准库可能没有这样的包含。同样通常也适用于所有第三方 header。仅在有记录和保证的情况下才依赖传递包含。