Почему я могу объявить a, но не могу b?
std::array a = {1,2,3,4,5};
std::array<std::array> b = {{1,2,3,4,5}};
Потому что компилятор не знает, что {{1,2,3,4,5}} - это именно std::array<std::array>>. Вы пытаетесь уговорить компилятор вывести не просто параметр шаблона, но и шаблонный параметр параметра шаблона (если не запутался :))
Попробуйте так:
std::array a = {1,2,3,4,5};
std::array<std::array<int,5>,1> b = {{1,2,3,4,5}};
или так:
std::array b = {std::array{1,2,3,4,5}};
C std::array так не получится, зато получится с std::vector
vector<vector<int>> b = { {1,2,3,4,5}, {6,7,8} };
UPD: Без new и оборачивания каждой внутренней скобки в array:
//придётся посчитать сколько элементов в строке
std::size_t n = 5; // Все строки должны быть одинаковой длины
int m[][n] = { {1,2,3,4,5}, {6,7,8,9,10} };
Сборка персонального компьютера от Artline: умный выбор для современных пользователей