Почему MSVC не сообщает об ошибке в дублированных анонимных членах профсоюза?

Я пытаюсь построить следующий код:

#include <stdint.h>

int main()
{
union {
uint32_t cw            : 13;

struct {
uint32_t setting4  : 4;
uint32_t cmd       : 9;
};

struct {
uint32_t setting8  : 8;
uint32_t cmd       : 5;
};
} control;

return 0;
}

который определяет 13-битное кодовое слово, которое состоит из нескольких полей с перекрывающимися интерпретациями.

Я ожидаю, что сборка не удастся из-за дублирования объявления cmd поле в двух структурах. Удивительно, но MSVC 2012 не сообщает об ошибке.

В качестве проверки работоспособности я проверил код в ideone.com и ошибка действительно появилась.

Примечание: похоже, что при запуске кода и печати содержимого полей после присвоения значения cw, затем cmd разрешается до первого (9-битного) члена.

1

Решение

Задача ещё не решена.

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

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