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

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

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

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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам