Using std::array with initialization lists

c++, c++11, libstdc++

Solution

`std::array` is funny. It is defined basically like this:

template<typename T, int size>
struct std::array
{
  T a[size];
};

It is a struct which contains an array. It does not have a constructor that takes an initializer list. But `std::array` is an aggregate by the rules of C++11, and therefore it can be created by aggregate initialization. To aggregate initialize the array inside the struct, you need a second set of curly braces:

std::array<std::string, 2> strings = {{ "a", "b" }};

Note that the standard does suggest that the extra braces can be elided in this case. So it likely is a GCC bug.

Problem

Unless I am mistaken, it should be possible to create a std:array in these ways: ``` std::array<std::string, 2> strings = { "a", "b" }; std::array<std::string, 2> strings({ "a", "b" }); ``` And yet, using GCC 4.6.1 I am unable to get any of these to work. The compiler simply says: ``` expected primary-expression before ',' token ``` and yet initialization lists work just fine with std::vector. So which is it? Am I mistaken to think std::array should accept initialization lists, or has the GNU Standard C++ Library team goofed?

Original source