我已经阅读了一些关于 -Wmissing-braces 的其他帖子:

最后一个问题的答案使得它看起来像 array<int, 3> x = {1,2,3} 应该可以正常工作 . cppreference also says

作为聚合类型,可以使用最多N个初始化程序给出的聚合初始化来初始化它,这些初始化程序可以转换为T:std :: array <int,3> a = {1,2,3}; .

但是,看来Clang仍然会发出警告in all of these cases

#include <vector>
#include <array>
int main() {
    std::vector<int> v1({1, 2, 3});
    std::vector<int> v2{1, 2, 3};
    std::vector<int> v3 = {1, 2, 3};

    std::array<int, 3> a1({1, 2, 3});  // warning
    std::array<int, 3> a2{1, 2, 3};    // warning
    std::array<int, 3> a3 = {1, 2, 3}; // warning - at least this should be allowed

    std::vector<std::vector<int>> vs;
    vs.push_back({1, 2, 3});

    std::vector<std::array<int, 3>> as;
    as.push_back({1, 2, 3});           // warning

    return 0;
}
source_file.cpp:11:25: warning: suggest braces around initialization of subobject [-Wmissing-braces]
        std::array<int, 3> a1({1, 2, 3});
                               ^~~~~~~
                               {      }
source_file.cpp:12:24: warning: suggest braces around initialization of subobject [-Wmissing-braces]
        std::array<int, 3> a2{1, 2, 3};
                              ^~~~~~~
                              {      }
source_file.cpp:13:27: warning: suggest braces around initialization of subobject [-Wmissing-braces]
        std::array<int, 3> a3 = {1, 2, 3};
                                 ^~~~~~~
                                 {      }
source_file.cpp:19:16: warning: suggest braces around initialization of subobject [-Wmissing-braces]
        as.push_back({1, 2, 3});
                      ^~~~~~~
                      {      }

为什么所有这些都会产生警告?其中一些在技术上是不正确的吗?