为什么Clang警告缺少std :: array的大括号?

时间:2017-01-02 19:19:49

标签: c++ c++11 clang

我已阅读其他一些关于setx的帖子:

最后一个问题的答案使得-Wmissing-braces看起来应该可以正常工作。 cppreference also says

  

作为聚合类型,可以使用最多array<int, 3> x = {1,2,3}初始化程序给出的聚合初始化来初始化它,该初始化程序可转换为NT

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

std::array<int, 3> a = {1,2,3};

#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;
}

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

0 个答案:

没有答案