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