Это из-за распада массива . Если вы не передадите массив по ссылке, он превратится в указатель. Это означает, что
void processArray(T elements[SIZE])
на самом деле
void processArray(T* elements)
и нет способа узнать, что SIZE
для вашего шаблона, поскольку указатель не знает размер массива, который он указывает на.
Как только вы сделаете параметр массива ссылкой, вы остановите его распад и сможете получить размер из массива, который передается в функцию.