LINUX.ORG.RU

История изменений

Исправление dissident, (текущая версия) :

Никуда. Тут можно: https://wandbox.org/permlink/IFPQPDS8syGIuAFq. Только ничего не поменялось. Закоментирование последней строчки ведет к no warning, а откоментирование к ошибке компиляции.

Просто может быть еще так что (struct xyz){.i = 1, .j = 2} это в C++ не compund literal, а временная переменная созданная с использованием designated initializer'а и скастованная на struct xyz. Хотя не похоже {.i = 1, .j = 2 } как могло бы быть валидным без (struct xyz)? Какого типа оно бы создало это нечто, если бы вся конструкция не была compound literal, а была созданием временного нечто и кастом. Впрочем это легко проверить:

https://ideone.com/hZ8Tl3

Ну вот, не компилируется. Говорит, что создание {.i = 1, .j = 2 } это initializer_list. И кастнуть его на xyz не может. А значит конструкция (struct xyz){.i = 1, .j =2 } именно compound initializer из C, а не initializer_list кастнутый на xyz (что не компилируется, разве что reinterpret_cast там всобачить).

Исправление dissident, :

Никуда. Тут можно: https://wandbox.org/permlink/IFPQPDS8syGIuAFq. Только ничего не поменялось. Закоментирование последней строчки ведет к no warning.

Просто может быть еще так что (struct xyz){.i = 1, .j = 2} это в C++ не compund literal, а временная переменная созданная с использованием designated initializer'а и скастованная на struct xyz. Хотя не похоже {.i = 1, .j = 2 } как могло бы быть валидным без (struct xyz)? Какого типа оно бы создало это нечто, если бы вся конструкция не была compound literal, а была созданием временного нечто и кастом. Впрочем это легко проверить:

https://ideone.com/hZ8Tl3

Ну вот, не компилируется. Говорит, что создание {.i = 1, .j = 2 } это initializer_list. И кастнуть его на xyz не может. А значит конструкция (struct xyz){.i = 1, .j =2 } именно compound initializer из C, а не initializer_list кастнутый на xyz (что не компилируется, разве что reinterpret_cast там всобачить).

Исходная версия dissident, :

Никуда. Тут можно: https://wandbox.org/permlink/IFPQPDS8syGIuAFq. Только ничего не поменялось. Закоментирование последней строчки ведет к no warning.

Просто может быть еще так что (struct xyz){.i = 1, .j = 2} это в C++ не compund literal, а временная переменная созданная с использованием designated initializer'а и скастованная на struct xyz. Хотя не похоже {.i = 1, .j = 2 } как могло бы быть валидным без (struct xyz)? Какого типа оно бы создало это нечно, если бы вся конструкция не была compound literal, а была созданием временного нечно и кастом. Впрочем это легко проверить:

https://ideone.com/hZ8Tl3

Ну вот, не компилируется. Говорит, что создание {.i = 1, .j = 2 } это initializer_list. И кастнуть его на xyz не может. А значет конструкция (struct xyz){.i = 1, .j =2 } именно compound initializer из C, а не initializer_list кастнутый на xyz (что не компилируется, разве что reinterpret_cast там всобачить).