Рассмотрим:
int ia[3][4];
for (auto row : ia)
for (auto col : row)
Первый
forвыполняет итерацию через ia, элементами которой являются массивы размера 4. Потому чтоrowне является ссылкой, когда компилятор инициализируетrow, он преобразует каждый элемент массива (как любой другой объект массива type) указателю на первый элемент массива. В результате в этом loop типrowравенint*.
Я не уверен, что понимаю, как работает этот авто, но если я могу предположить, что он автоматически дает тип строке на основе типа элементов массива ia, но я не понимаю, почему этот тип for, где строка не является ссылкой, недействительна. Почему это произойдет? "указатель на этот массив первый элемент", из-за чего?