Por que non-const std :: array :: operator [] não constexpr?

Estou tentando preencher uma matriz 2D em tempo de compilação com uma determinada função. Aqui está o meu código:

template<int H, int W>
struct Table
{
  int data[H][W];
  //std::array<std::array<int, H>, W> data;  // This does not work

  constexpr Table() : data{}
  {
    for (int i = 0; i < H; ++i)
      for (int j = 0; j < W; ++j)
        data[i][j] = i * 10 + j;  // This does not work with std::array
  }
};

constexpr Table<3, 5> table;  // I have table.data properly populated at compile time

Funciona muito bem,table.data é preenchido corretamente no momento da compilação.

No entanto, se eu mudar a matriz 2D simplesint[H][W] comstd::array<std::array<int, H>, W>, Tenho um erro no corpo do loop:

error: call to non-constexpr function 'std::array<_Tp, _Nm>::value_type& std::array<_Tp, _Nm>::operator[](std::array<_Tp, _Nm>::size_type) [with _Tp = int; long unsigned int _Nm = 3ul; std::array<_Tp, _Nm>::reference = int&; std::array<_Tp, _Nm>::value_type = int; std::array<_Tp, _Nm>::size_type = long unsigned int]'
data[i][j] = i * 10 + j;
^
Compilation failed

Obviamente, estou tentando chamar uma sobrecarga não constante destd::array::operator[], o que não éconstexpr. A questão é: por que não éconstexpr? Se o C ++ 14 nos permitir modificar variáveis declaradas emconstexpr escopo, por que isso não é suportado porstd::array?

Eu pensava questd::array é como uma matriz simples, só que melhor. Mas aqui está um exemplo, onde eu posso usar matriz simples, mas não posso usarstd::array.

questionAnswers(4)

yourAnswerToTheQuestion