最终的C11标准包括基于范围的规定,用于为本机阵列“正常工作”,而不必包括< iterator>或任何其他标题.据我所知,在工作文件
n2900中,由于英国78和79的评论,这一点首先得到了解决.
该提案还包含一个隐含#include< initializer_list>在每个翻译单元中,该程序
#include <iostream> int main() { for (auto i : { 1,2,3,4,5 }) std::cout << i << "\n"; }
即使没有包含< initializer_list>将是标准的.
然而,当概念从C11中删除时,基于范围的修改如n2930所示.尽管数组的“正常工作”规定仍然存在,但没有提到初始化列表也是如此;实际上,各种标准库容器头将#include< initializer_list>的规范而8.5.4.2的最终文本意味着与我相反.
据我所知,这与这个话题的最后措辞非常接近.那么,上面的程序是对最终标准的完善,还是需要#include< initializer_list>甚至使用它在一个基于范围的?换句话说,使用基于范围的初始化器列表是否构成了FDIS的每个8.5.4.2的“使用std :: initializer_list —即使是类型未命名的隐式用法”?