Назначенные инициализаторы являются незначительным отклонением совокупной инициализации . Единственное использование имен указателей состоит в том, чтобы решить, какой агрегатный элемент инициализировать из заданного инициализатора скобок или равных. Использование назначенной инициализации ничего не меняет в специфической c форме инициализации и, следовательно, независимо от того, является ли она действительной.
Если ваш объект Test
, Test{100u, "hello"}
и Test{.v = 100u, .b = "hello"}
оба являются действительными или оба недействительны. В обоих случаях Test::b
инициализируется в соответствии с [dcl.init.aggr] 4.2 :
В противном случае элемент инициализируется копией из соответствующего предложения инициализатора или инициализируется с помощью скобки-или-равно-инициализатора соответствующего назначенного-инициализатора-предложения.
Копирование-инициализация - это точно такой же процесс, который был бы, если бы вы просто инициализировали переменную массива. Что совершенно верно.
Так что вы могли бы работать. Это ошибка компилятора.
"Обходной путь" G CC заключается в ожидании исправления ошибки. Или go вернуться к стандартной агрегатной инициализации, пока их компилятор не будет исправлен.