В следующем коде
#include<iostream>
template<typename T,size_t N>
void cal_size(T (&a)[N])
{
std::cout<<"size of array is: "<<N<<std::endl;
}
int main()
{
int a[]={1,2,3,4,5,6};
int b[]={1};
cal_size(a);
cal_size(b);
}
Как и ожидалось, размер обоих массивов печатается. Но как N автоматически получает инициализацию до правильного значения размера массива (массивы передаются по ссылке)? Как работает этот код?