Личный модификатор С++ игнорируется на вложенной анонимной структуре

Следующий пример кода компилируется просто в Visual С++:

class Test {
private:
    struct {
        struct {
            int privateData;
        };
    };
};

int main(int, char **)
{
    Test test;
    test.privateData = 0;
    return 0;
}

Но почему? Я ожидаю ошибку компилятора, потому что член privateData должен быть недоступен для функции main, так как он должен быть private как контейнер контейнера. Я знаю, что неназванные структуры не являются частью официального С++, но этот проект является asinine.

Кстати, я также попытался изменить private на protected и struct на union: похоже, компилятор отказывается соблюдать модификаторы доступа в анонимных структурах и объединениях, которые вложены внутри другого анонимного struct или union.

Может кто-нибудь объяснить эту функцию?

Ответ 1

Да, это ошибка. Microsoft признала, что это отчет о обратной связи здесь.

В настоящий момент ошибка находится в статусе "не фиксирует", и неясно, когда (если когда-либо) он будет исправлен. Для него существует несколько странное обходное решение, парсер IntelliSense, встроенный в Visual Studio, написанный Edison Design Group, жалуется на это. Вы получаете красные squiggles и сообщение:

Ошибка: член "Test.privateData" (объявленный в строке 10) недоступен