
Currently, creating a multidimensional boost/std::array is a bit unwieldy: array<array<array<int, 5>, 4>, 3> a; // int a[3][4][5] a[2][3][4] = 5; As a first step, we should consider enabling the element type T of array<T, N> to be an array type. array<int[4][5], 3> a; // int a[3][4][5] a[2][3][4] = 5; This almost works already, except for the array interface functions specified and implemented in terms of, say, std::equal or std::fill. It is an open question whether these standard algorithms should not be fixed themselves to work on array types, as swap_ranges has been, but for now, we can implement the array functions in a way that works. Opinions on that part? If we agree that this is a good idea, the next logical step would be to eliminate the special handling of the first extent and simply allow array<int[3][4][5]> a; // int a[3][4][5] a[2][3][4] = 5;