In
auto array1 = AllFormats();
auto v3 = array1[3];
array1
не является массивом, поэтому границы не могут быть проверены.Даже если вы вернетесь по ссылке, auto
не будет выводить единицу, поэтому вместо этого массив распадается на указатель, а array1
получает вывод как Format *
.
Format (&array2)[3] = AllFormats();
v3 = array2[3];
Создает предупреждение, потому что array2
является ссылкой на массив, поэтому он знает размер.
Чтобы получить auto
для вывода массива, вам нужно либо использовать auto&
, который будет работать только в том случае, если возвращаемое значение являетсяссылка lvalue, или auto&&
, которая будет связывать ссылку с чем-либо.