Ответ 1
Это выглядит как ошибка gcc: Ошибка 65815 - в NSDMI не работает команда brace elision. В отчете говорится:
На странице 975 "Язык программирования С++", 4-е издание, Bjarne Строуструп говорит:
"Массив может быть инициализирован списком инициализаторов: array a1 = {1, 2, 3};"
и Clang (V 3.5) принимает его. Однако g++ 4.9.2 считает, что это Ошибка:
"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 };
};
Похоже, что исправление находится в редакции главы, код OPs работает в этой версии, видеть его в прямом эфире.
Как отмечено в отчете об ошибке с использованием внутреннего набора фигурных скобок, это возможный обход:
std::array<bool,3> arr={ {false,false,false} };
^ ^