¿Hay alguna manera de exigir la inicialización completa de std :: array

estoy usandostd::array<size_t, N> (N es una variable de plantilla fija).

#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}}));
}

Y funciona bien. El problema es que este otro código se permite silenciosamente:

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

Es decir, incluso con elementos perdidos, elarray se inicializa de alguna manera, incluso si está bien definido (por ejemplo, los elementos restantes inicializados a cero, no estoy seguro), esta es una posible fuente de errores.

¿Hay alguna manera de hacer cumplir la inicialización de los elementos adicionales? P.ej. generando un error del compilador o una advertencia.

Una opción que contemplé es usarinitializer_list

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

El problema es que esto generó un error de tiempo de ejecución en el mejor de los casos y un control en cada llamada. Preferiría un error / advertencia del compilador.

No me molesta tanto la inicialización predeterminada destd::array<>{} pero por elincompleto inicialización (Tal vez no se pueda hacer nada al respecto, ya que esto se hereda del comportamiento deT[N] matriz estática).

Traté de usarclang 3.5 ygcc 5.

Respuestas a la pregunta(3)

Su respuesta a la pregunta