Existe uma maneira de impor a inicialização completa do std :: array

estou usandostd::array<size_t, N> (N é uma variável de modelo fixa).

#include<array>
template<size_t N>
struct A{
   size_t function(std::array<size_t, N> arr){ return arr[N-1];} // just an example
};

int main(){
   A<5> a;
   a.function({{1,2,3,4,5}}));
}

E isso funciona bem. O problema é que esse outro código é silenciosamente permitido:

   A.function({{1,2,3}}));

Ou seja, mesmo com elementos perdidos, oarray é inicializado de alguma forma, mesmo se estiver bem definido (por exemplo, elementos restantes inicializados em zero, não tenho certeza), essa é uma possível fonte de erros.

Existe uma maneira de impor a inicialização dos elementos extras? Por exemplo. gerando um erro ou um aviso do compilador.

Uma opção que eu contemplava é usarinitializer_list

   size_t function2(std::initializer_list<size_t> il){ assert(il.size() == N); ...}

O problema é que isso gerou, na melhor das hipóteses, um erro de tempo de execução e uma verificação em todas as chamadas. Eu preferiria um erro / aviso do compilador.

Não estou muito incomodado com a inicialização padrão dostd::array<>{} mas peloincompleto inicialização. (Talvez não seja possível fazer nada a respeito, pois isso é herdado do comportamento deT[N] matriz estática.)

Eu tentei usarclang 3.5 egcc 5.

questionAnswers(3)

yourAnswerToTheQuestion