隐式使用 initializer_list

Implicit use of initializer_list

§[dcl.init.list] 8.5.4/2:

The template std::initializer_list is not predefined; if the header <initializer_list> is not included prior to a use of std::initializer_list — even an implicit use in which the type is not named (7.1.6.4) — the program is ill-formed.

这是否意味着这个程序格式错误?

#include <vector>
int main() {
    // uses vector::vector(initializer_list<T>, const Allocator&) constructor
    std::vector<int> v = {1, 2, 3};
}

你的程序不是ill-formed因为<vector>保证包含<initializer_list>(所有标准库容器也是如此)

§23.3.1 [sequences.general]

Header <vector> 剧情简介

#include <initializer_list>
...

搜索 #include <initializer_list> 的标准显示 header 与以下 headers

一起包含
  • <utility>
  • <string>
  • <array>
  • <deque>
  • <forward_list>
  • <list>
  • <vector>
  • <map>
  • <set>
  • <unordered_map>
  • <unordered_set>
  • <queue>
  • <stack>
  • <algorithm>
  • <random>
  • <valarray>
  • <regex>