Добавить к принятому ответу:
std::array<char, 2> a1{'a', 'b'};
std::array<char, 2> a2 = {'a', 'b'};
std::array<char, 2> a3{{'a', 'b'}};
std::array<char, 2> a4 = {{'a', 'b'}};
все работы на GCC 4.6.3 (Xubuntu 12.01).Тем не менее,
void f(std::array<char, 2> a)
{
}
//f({'a', 'b'}); //doesn't compile
f({{'a', 'b'}});
для компиляции выше необходимо использовать двойные скобки.Версия с одинарными фигурными скобками приводит к следующей ошибке:
../src/main.cc: In function ‘int main(int, char**)’:
../src/main.cc:23:17: error: could not convert ‘{'a', 'b'}’ from ‘<brace-enclosed initializer list>’ to ‘std::array<char, 2ul>’
Я не уверен, какой аспект вывода / преобразования типов заставляет вещи работать таким образом, или это странная реализация GCC.