Я не знаю, что значит "условия задачи противоречат свойствам платформы".
пока условия данной задачи не противоречат свойствам платформы и компилятора,
Для данной задачи это означает, что система и настройки компилятора таковы, что с типом
long можно работать, как с массивом из 4-х байтов, в задаче - типа
char, то есть, тип
long занимает столько же памяти, сколько
char[4].
Но оснований считать, что этот код продолжит работать, нет.
Основания следующие:
Под
union выделяется в данном случае 4 байта (размер наибольшего элемента, в соответствии со стандартом).
Следовательно, поля long_value и char_values, занимающие по 4 байта каждое, размещаются в одной и той же области памяти.
Следовательно, запись в поле long_value заполняет и массив char_values. Аналогично, доступ к байту из массива char_values означает доступ к одному из байт поля long_value.
Это и означает
работать с целым числом (long) как с "массивом" из четырех однобайтовых чисел (char)
Кроме разве что доброй воли разработчиков компиляторов, т.е. в случае MSVC какие-то шансы еще есть, а в случае gcc - только если повезет и разработчики не придумают, какую оптимизацию на 0.01% для процессора 1993 года выпуска можно сделать за счет учета этого UB.
Это не про данную тему.