Как можно инициализировать агрегатные типы в C ++ 14 с помощью синтаксиса списочной инициализации?
Aggregate_t {};
Это рассматривается как совокупная инициализация, которая выдает ошибки или предупреждения для неинициализированных членов Aggregate_t
,
Это вообще возможно?
РЕДАКТИРОВАТЬ: Примеры
struct Aggregate_t {
int x;
};
int main (int, char**)
{
Aggregate_t {};
return 0;
}
Компиляция с g ++ — 4.9.2:
main.c++: In function ‘int main(int, char**)’:
main.c++:7:16: warning: missing initializer for member ‘Aggregate_t::x’ [-Wmissing-field-initializers]
Aggregate_t {};
^
[Dcl.init.aggr]:
7 — если их меньше инициализатора-статьи в списке, чем есть элементы в совокупности, то каждый элемент, не инициализированный явно, должен быть инициализирован [C ++ 14: от его скобки или равно-инициализатор или, если нет скобки или равно-инициализатор,] из пустого списка инициализаторов (8.5.4).
Таким образом, g ++ переусердствует со своим предупреждением; Я не знаю, как избежать этого, сохраняя его в случаях, когда предупреждение действительно, за исключением, конечно, использования инициализации копирования с ожидаемым разрешением копирования:
Aggregate_t a = Aggregate_t();