Будут ли поддерживаться в будущем нетривиальные обозначенные инициализаторы (Пост C ++ 17)?

Это вдохновлено этим сообщение где
нетривиальные обозначенные инициализаторы не поддерживаются

Я уже читал эта почта и некоторые ответы утверждают, что эта функция уже поддерживается.

Однако, используя 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)?

  • Если не, что является самым большим препятствием, почему оно не будет поддерживаться
  • Если да, В чем проблема с текущей версией C ++, почему для ее поддержки требуется слишком много времени?

COMPILER

GNU C ++ 17 — проверка wandbox

2

Решение

Предложение принято для добавления обозначенных инициализаторов в C ++ 20 (p0329r0) ограничено намеренно (обратите внимание, что в качестве функции официального языка это, в частности, функция C ++ 20 — но gcc и clang уже по существу поддерживают эту функцию уже давно):

введите описание изображения здесь

C ++ является более сложным языком, чем C, и нам есть о чем беспокоиться. Таким образом, мы получаем следующие правила: нельзя смешивать указатели и значения, указатели появляются в порядке объявления, уникальны и не являются ни вложенными, ни индексами массивов. Это уже очень полезная языковая функция, как есть.

Если не, что является самым большим препятствием, почему оно не будет поддерживаться

Мотивация, наверное. Нам действительно нужен этот синтаксис? Это проблема, которая требует решения? С другой стороны, могут быть разбор неоднозначности — вы могли бы создать инициализаторы индекса массива, которые очень похожи на лямбды. Но если вы считаете, что это достаточно полезно, вы можете написать предложение.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]