C++ 什么';std::array的这种内联初始化有什么问题?

C++ 什么';std::array的这种内联初始化有什么问题?,c++,arrays,c++11,g++,C++,Arrays,C++11,G++,考虑以下声明: #include <array> struct X { //std::array<bool,3> arr={false,false,false}; bool brr[3]={false,false,false}; }; OTOH,这个声明在main()中没有问题。此外,以下初始化在结构X中也起作用: std::array<bool,3> arr={{false,false,false}}; std::array arr={

考虑以下声明:

#include <array>

struct X
{
    //std::array<bool,3> arr={false,false,false};
    bool brr[3]={false,false,false};
};
OTOH,这个声明在
main()
中没有问题。此外,以下初始化在结构X中也起作用:

std::array<bool,3> arr={{false,false,false}};
std::array arr={{false,false,false};

为什么我不能在结构定义中使用带大括号的简单初始化?

这看起来像是一个gcc错误,请参见:。报告说:

〈C++编程语言〉第975页,第四版,Bjarne 斯特罗斯图普说:

“数组可以由初始值设定项列表初始化:数组a1= {1,2,3};”

而叮当(3.5节)接受了它。然而,G++4.9.2认为这是一个 错误:

看起来修复程序在head版本中,OPs代码在该版本中起作用

正如错误报告中所指出的,使用一组内部大括号是一种可能的解决方法:

std::array<bool,3> arr={ {false,false,false} };
                         ^                 ^
std::array arr={{false,false,false};
^                 ^

注意,在C++11中,与具有类内初始值设定项的C++14不同。
"error: array must be initialized with a brace-enclosed initializer
   const std::array<double, 3> _ar0val = {1.0, -1.0, 1.0};"
struct array {
  int data [2];
};

struct X {
  array a = { 1, 2 };
};
std::array<bool,3> arr={ {false,false,false} };
                         ^                 ^