Первое, что следует заметить, это то, что инициализатор {1, "t"}
использует brace elision для инициализации субагрегата A.c
, что означает, что литерал "t"
используется для непосредственной инициализации внутреннего массива что std::array
имеет место. В этом случае этот массив будет выглядеть как char data[12]
.
Это сводится к тому, что мы инициализируем ссылку на const A
с помощью фигурного списка, содержащего элемент, который инициализирует массив элементов .
Это будет несколько эквивалентно:
struct S {
char const data[2];
};
S const& s = {"t"}; // fail for gcc
В GCC уже есть отчет об ошибке .
Вы уже предоставили обходной путь в разделе комментариев. Просто инициализируйте ссылку как:
const A& ar = A{1, "t"}