Это вдохновлено этим сообщение где
нетривиальные обозначенные инициализаторы не поддерживаются
Я уже читал эта почта и некоторые ответы утверждают, что эта функция уже поддерживается.
Однако, используя C ++ 17 и этот код:
struct s {
int a[2];
s (int b): a{[1]=b} {} // error
};
s foo(1);
Я все еще получаю ошибку:
извините, невыполнено: нетривиально обозначено
инициализаторы не поддерживаются
s (int b): a{[1]=b} {}
Я думал, что эта функция действительно полезна.
Итак, мои вопросы:
Есть ли план поддержать это для будущих версий C ++ (пост C ++ 17)?
COMPILER
GNU C ++ 17 — проверка wandbox
Предложение принято для добавления обозначенных инициализаторов в C ++ 20 (p0329r0) ограничено намеренно (обратите внимание, что в качестве функции официального языка это, в частности, функция C ++ 20 — но gcc и clang уже по существу поддерживают эту функцию уже давно):
C ++ является более сложным языком, чем C, и нам есть о чем беспокоиться. Таким образом, мы получаем следующие правила: нельзя смешивать указатели и значения, указатели появляются в порядке объявления, уникальны и не являются ни вложенными, ни индексами массивов. Это уже очень полезная языковая функция, как есть.
Если не, что является самым большим препятствием, почему оно не будет поддерживаться
Мотивация, наверное. Нам действительно нужен этот синтаксис? Это проблема, которая требует решения? С другой стороны, могут быть разбор неоднозначности — вы могли бы создать инициализаторы индекса массива, которые очень похожи на лямбды. Но если вы считаете, что это достаточно полезно, вы можете написать предложение.
Других решений пока нет …