通过 std::initializer_list 初始化 std::pair 在初始化 std::array 时不起作用?

Initializing std::pair via std::initializer_list doesn't work while initializing an std::array?

我想通过 std::initializer_list.

初始化 std::pairstd::array
pair<int, int> p = {3,4};//ok
array<pair<char,char>, 3> p = { make_pair('{','}'), make_pair('[',']'), make_pair('(',')') };//ok
array<pair<char,char>, 3> p = { {'{','}'}, {'[',']'}, {'(',')'} };//not ok

为什么我的第三个选项不起作用?此外,这也很好用:

vector<pair<char, char>> brackets = { {'{','}'}, {'[',']'}, {'(',')'} };

用大括号初始化列表初始化 std::array 有点棘手,因为您需要一组额外的大括号(因为它是一个聚合):

array<pair<char,char>, 3> p = {{ {'{','}'}, {'[',']'}, {'(',')'} }};
                               ^                                 ^

std::vector 不同,因为使用大括号初始化列表将导致调用 std::initializer_list 构造函数,而不是使用像 std::array.

这样的聚合初始化