Личный модификатор С++ игнорируется на вложенной анонимной структуре
Следующий пример кода компилируется просто в 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) недоступен